Merhaba,

Yapmak istediğim durum şu şekilde PrimeFaces kullanıyorum. İki tane selectonemenum var. 1. selectonemenu de değer değiştiğinde ikincinin görünmesini istiyorum. Bunun için aşağıdaki şekilde yapıyorum.

xhtml sayfası

<h:form id="CustomerCreateForm">

            <h:panelGroup id="display" rendered="#{customerController.selected != null}">
                <p:panelGrid columns="2" columnClasses="column">

                    <p:outputLabel value="#{myBundle.CreateCustomerLabel_customerId}" for="customerId" />
                    <p:inputText id="customerId" value="#{customerController.selected.customerId}" title="#{myBundle.CreateCustomerTitle_customerId}" required="true" requiredMessage="#{myBundle.CreateCustomerRequiredMessage_customerId}"/>

                    <p:outputLabel value="#{myBundle.CreateCustomerLabel_discountCode}" for="discountCode" />
                    <p:selectOneMenu id="discountCode" value="#{customerController.selected.discountCode}" required="true" requiredMessage="#{myBundle.CreateCustomerRequiredMessage_discountCode}" converter="discountCodeConverter">
                        <f:selectItem itemLabel="#{myBundle.SelectOneMessage}"/>
                        <f:selectItems value="#{discountCodeController.items}"
                                       var="discountCodeItem"
                                       itemValue="#{discountCodeItem}"
                                       itemLabel="#{discountCodeItem.discountCode.toString()}"
                                       />
                        <p:ajax event="change" update="@form"/>
                    </p:selectOneMenu>

                    <p:outputLabel value="#{myBundle.CreateCustomerLabel_zip}" for="zip" rendered="#{customerController.selected.discountCode.discountCode eq 'H'}"/>
                    <p:selectOneMenu id="zip" value="#{customerController.selected.zip}" required="true" requiredMessage="#{myBundle.CreateCustomerRequiredMessage_zip}" converter="microMarketConverter" rendered="#{customerController.selected.discountCode.discountCode eq 'H'}">
                        <f:selectItem itemLabel="#{myBundle.SelectOneMessage}"/>
                        <f:selectItems value="#{microMarketController.items}"
                                       var="zipItem"
                                       itemValue="#{zipItem}"
                                       itemLabel="#{zipItem.zipCode.toString()}"
                                       />

                    </p:selectOneMenu>

                </p:panelGrid>
                <p:commandButton actionListener="#{customerController.saveNew}" value="#{myBundle.Save}" update="display,:CustomerListForm:datalist,:growl" oncomplete="handleSubmit(xhr,status,args,PF('CustomerCreateDialog'));">
                    <p:confirm header="#{myBundle.ConfirmationHeader}" message="#{myBundle.ConfirmCreateMessage}" icon="ui-icon-alert"/>
                </p:commandButton>

                <p:commandButton value="#{myBundle.Cancel}" onclick="PF('CustomerCreateDialog').hide()"/>
            </h:panelGroup>

        </h:form>

beans

import tr.bel.gantep.mavenproject1.entities.Customer;
import javax.inject.Named;
import javax.faces.view.ViewScoped;

@Named(value = "customerController")
@ViewScoped
public class CustomerController extends AbstractController<Customer> {

    public CustomerController() {
        // Inform the Abstract parent controller of the concrete Customer Entity
        super(Customer.class);
    }

}

Bu şekilde yaptığımda DiscountCode "H" ise göstermesi gerekiyor göstermiyor. Bu kısmı

<p:ajax event="change" update="zip"/>

şu şekilde değiştiriyorum.

<p:ajax event="change" update="@form"/>

Çalışıyor fakat bu kez de diğer alanlara girmiş olduğum değerler siliniyor. Bu konuda yardımlarınız için şimdiden teşekkkür ederim.

soruldu: 06 Kas '15, 07:57

kurtomerfaruk's gravatar image

kurtomerfaruk
1.3k222940
cevap kabul oranı: 30%

değiştirildi: 18 Kas '15, 03:58


Merhaba,

Aradan uzun bir zaman geçti ama çözdüğüm yolu paylaşmak istedim. Bunu javascript ile çözdüm o selectonemenunun olduğu satırın display:none yaparak bu sorundan kurtulmuş oldum.

<p:dialog id="CustomerCreateDlg" onShow="discountChange()" widgetVar="CustomerCreateDialog" modal="true" resizable="false" appendTo="@(body)" header="#{myBundle.CreateCustomerTitle}" closeOnEscape="true">
<h:form>
.........
......
.....

 <p:outputLabel value="#{myBundle.CreateCustomerLabel_discountCode}" for="discountCode" />
                        <p:selectOneMenu id="discountCode" value="#{customerController.selected.discountCode}" widgetVar="discountWidget" required="true" requiredMessage="#{myBundle.CreateCustomerRequiredMessage_discountCode}" converter="discountCodeConverter">
                            <f:selectItem itemLabel="#{myBundle.SelectOneMessage}"/>
                            <f:selectItems value="#{discountCodeController.items}"
                                           var="discountCodeItem"
                                           itemValue="#{discountCodeItem}"
                                           itemLabel="#{discountCodeItem.discountCode.toString()}"
                                           />
                            <p:ajax event="change" oncomplete="discountChange()" update="@this"/>
                        </p:selectOneMenu>
<script type="text/javascript">
                    function discountChange(){
                        var zip = document.getElementById("CustomerCreateForm:zip").parentNode.parentNode;
                        var discountCode = PF('discountWidget').getSelectedValue();
                        if(discountCode == "H"){
                            zip.style.display="";
                        }else{
                            zip.style.display="none";
                        }

                    }
                </script>
    </h:form>
    </p:dialog>
permanent link

cevaplandı: 08 Ara '15, 06:37

kurtomerfaruk's gravatar image

kurtomerfaruk
1.3k222940
cevap kabul oranı: 30%

Merhaba;

<p:ajax event="change" update="zip"/>

satırı zip id'li elemanı günceller. Bu güncelleme görünmeyen elemanı görünür hale getiremez. Rendered'in çalışlabilmesi için görünmeyen elemanın parent'ini güncellemen gerekir. update="@form" yazdığında görünür hale gelmesinin sebebide budur. Örneğin, 2. selectOneMenu'yu bir panel içerisine alıp, o paneli güncellersen yine görünmeye başlayacaktır.

<p:ajax event="change" update="@form"/>

satırını kullandığında verilerin silinmesinin sebebi viewScope kullanmamış olmandan kaynaklanıyordur. Scope'ların kullanım alanlarına bakmalısın.

permanent link

cevaplandı: 14 Kas '15, 10:08

SaRPaRDa's gravatar image

SaRPaRDa
5.0k213165
cevap kabul oranı: 27%

@SaRPaRDa öncelikle cevabın için teşekkürler. fakat viewScope kullanmama rağmen siliniyor

(18 Kas '15, 01:38) kurtomerfaruk kurtomerfaruk's gravatar image

İstersen bean ve xhtml sayfa kodlarını bir kod paylaşım sitesi üzerinden paylaş. Daha kolay çözüm üretiriz.

(18 Kas '15, 02:04) SaRPaRDa SaRPaRDa's gravatar image

@SaRPaRDa soruyu güncellendim kullandığım xhtml ve bean kodlarını paylaştım

(18 Kas '15, 03:58) kurtomerfaruk kurtomerfaruk's gravatar image

AbstractController kullandığın için değerlerin silinmesine yorum yapamayacağım. AbstractController'dan çıkarıp değerler siliniyormu diye bakabilirsin.

render olmaması ile ilgilide daha önce söylediğim gibi kendisini değil parentini update etmelisin. outputPanel içerisine alıp paneli update ederek aspirin bir çözüm üretebilirsin belki.

(18 Kas '15, 04:23) SaRPaRDa SaRPaRDa's gravatar image
Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×97
×32

Soruldu: 06 Kas '15, 07:57

Görüntüleme: 451 kez

Son güncelleme: 08 Ara '15, 06:37

powered by BitNami OSQA