SORU
26 Aralık 2011, PAZARTESİ


Nasıl istemci KİMLİĞİ bulmak için ajax update/işlemek için bileşen? İfade "deneme" referans "bar" bileşen bulmak;

Aşağıdaki kodu Dersler Kılavuzunu PrimeFaces DataTable ilham <p:layout> <p:layoutUnit> <p:tab> <p:tabView> bir ikamet içine konur. İşte kod iç kısmı (p:tab bileşen başlayarak); dış kısmı önemsiz.

<p:tabView id="tabs">
    <p:tab id="search" title="Search">                        
        <h:form id="insTable">
            <p:dataTable id="table" var="lndInstrument" value="#{instrumentBean.instruments}">
                <p:column>
                    <p:commandLink id="select" update="insTable:display" oncomplete="dlg.show()">
                        <f:setPropertyActionListener value="#{lndInstrument}" 
                                        target="#{instrumentBean.selectedInstrument}" />
                        <h:outputText value="#{lndInstrument.name}" />
                    </p:commandLink>                                    
                </p:column>
            </p:dataTable>
            <p:dialog id="dlg" modal="true" widgetVar="dlg">
                <h:panelGrid id="display">
                    <h:outputText value="Name:" />
                    <h:outputText value="#{instrumentBean.selectedInstrument.name}" />
                </h:panelGrid>
            </p:dialog>                            
        </h:form>
    </p:tab>
</p:tabView>

I <p:commandLink> ' I ne zaman kod çalışmıyor ve mesaj verir:

İfade ile bileşen bulmak "istikrarsız:ekran" başvurulan "sekmeleri:istikrarsız seçin:".

Aynı <f:ajax>, kullanmaya çalıştığımda farklı bir mesaj temelde aynı şeyi söylüyorum başarısız:

<f:ajax> bilinmeyen bir kimliği içerir "istikrarsız:ekran" olamaz bileşen kapsamında bulun "sekmeleri:istikrarsız seçin:"

Nasıl bu neden olur ve nasıl çözebilirim?

CEVAP
27 Aralık 2011, Salı


Gerçek istemci KİMLİĞİ için HTML çıktısı bak

Müşteri KİMLİĞİ bulmak için oluşturulan HTML çıktısı bakmak gerekir. Tarayıcıda sayfayı açın, sağ veKaynağı Görüntüle. İlgi OLUMSUZLUK bileşeni HTML gösterimini bulun ve id istemci KİMLİĞİ alın.

Eğer kendi başına gelince içeren yineleme dizin gibi :0:, :1: vb (çünkü içinde bir yineleme bileşen), o zaman gerekir fark bu güncelleme belirli bir yineleme yuvarlak değil her zaman destekledi. Alt bu konuda daha fazla ayrıntı için cevap bakın.

NamingContainer bileşenleri ezberlemek ve onları her zaman sabit bir ID ver

Eğer bir bileşen olan istediğin için başvuru süreci ajax/yürütmek/güncelleme/oluşturma değil içinde aynı NamingContainer üst, sonra ihtiyacınız referans kullanarak mutlak bir istemci KİMLİĞİ yerine bir akrabası istemci KİMLİĞİ. Mutlak istemci KİMLİĞİ varsayılan olarak hangi NamingContainer ayırıcı karakteri ile başlar :.

NamingContainer bileşenleri için örnek<h:form>, , *, *25<h:dataTable><p:tabView> (böylece, tüm kompozit bileşenleri), vb. Kolayca oluşturulan HTML çıktısı bakarak onları tanımak, onların KİMLİĞİ tüm alt bileşenleri oluşturulan istemci KİMLİĞİ önüne. Sabit bir KİMLİĞİ yok, o zaman AKSARAY j_idXXX biçiminde otomatik bir ID kullanır unutmayın. Kesinlikle onları sabit bir ID vererek kaçınmalısınız. OmniFaces NoAutoGeneratedIdViewHandler gelişimi sırasında bu yararlı olabilir.

Eğer UIComponent javadoc bulmak için söz konusu olduğunu biliyorum, o zaman da sadece NamingContainer arayüzü oluşturan ya da değil orada kontrol edebilirsiniz. Örneğin, HtmlForm (UIComponent arkasında <h:form> etiket) gösterir uygular NamingContainer HtmlPanelGroup (UIComponent arkasında <h:panelGroup> tag) değildir, bu yüzden bunu uygulamıyor NamingContainer. Here is the javadoc of all standard components here is the javadoc of PrimeFaces.

Sorununuzu çözmek için

Senin durumunda:

<p:tabView id="tabs"><!-- This is a NamingContainer -->
    <p:tab id="search"><!-- This is NOT a NamingContainer -->
        <h:form id="insTable"><!-- This is a NamingContainer -->
            <p:dialog id="dlg"><!-- This is NOT a NamingContainer -->
                <h:panelGrid id="display">

<h:panelGrid id="display"> oluşturulan HTML çıktısı şu şekilde görünür:

<table id="tabs:insTable:display">

id tam olarak almak için update kullanım için : ile istemci KİMLİĞİ ve önek gerekir:

<p:commandLink update=":tabs:insTable:display">

Nasıl yorganın altında çalışır

Bu belirtildi< . em^"" . arama ifadesi 80**:

Birarama ifadesiya bir tanımlayıcı tam UIComponent ya da bu tür tanımlayıcıları bir dizi UINamingContainer#getSeparatorChar karakter değeri ile bağlantılı. bir kimlik özelliği ile karşılaştırılır (oluşur Algoritma alternatif alogrithms sürece sonuç olarak kullanılabilir olsa da şu şekilde işliyor, gereken arama aynıdır:

  • Sonra aşağıdaki koşullardan biri olarak durdurarak arama için temel teşkil edecek UIComponent tanımlamak, bir araya geldi:
    • Eğer arama ifade ayırıcı karakteri "" arama ifadesi), temel bileşen ağacın kökü UIComponent olacak mutlak. () adlı çalışması ile başlar Lider ayırıcı karakteri şeritli olacak ve arama ifade kalan bir "aşağıda açıklandığı gibi" arama ifadesi. göre ele alınır
    • UIComponent NamingContainer aksi halde, temel olarak hizmet edecektir.
    • Aksi takdirde, bu bileşenin ebeveynler arama. Eğer NamingContainer karşılaşılırsa, üs olacaktır.
    • Aksi takdirde NamingContainer karşılaşılırsa () kök UIComponent temel olacaktır.
  • Arama ifadesi (olasılıkla değiştirilmiş önceki adım) şimdi bir "göreceli" arama ifadesi kullanılacak bulmak için bileşen (varsa) kimliği bu maçta kapsamında temel bileşeni. Maçı aşağıdaki gibi yapılır:
    • Eğer arama ifadesi, basit bir tanımlayıcı, bu değer göre kimliği özelliği, ve daha sonra ardışık aracılığıyla yönleriyle ve çocukların temel UIComponent (bunun dışında ne olursa soyundan NamingContainer bulunursa, kendi yönleriyle ve çocukları değil, aranan).
    • Eğer arama ifadesi birden fazla tanımlayıcı, ayırıcı karakteri ile ayrılmış içeriyorsa, ilk tanımlayıcı NamingContainer önceki kurşun kurallarına noktayı bulmak için kullanılır. Daha sonra NamingContainer findComponent() yöntem, aranan ifadenin geri kalanı aktarımı denir.

PrimeFaces de OLUMSUZLUK spec bağlıdır unutmayın, ama RichFaces "some additional exceptions" kullanır.

< . em^"" . reRender UIComponent.findComponent() algoritma (ek bazı istisnalar dışında) bileşen ağacında bileşen bulmak için kullanır.

Bu ek istisna dışında hiçbir yerde ayrıntılı olarak tarif, ama bilinen göreli bileşen Kimliği (yani bu başlangıç :) sadece aranan bağlamında en üst NamingContainer, ama aynı zamanda bütün diğer NamingContainer bileşenleri aynı görünüm (göreceli olarak pahalı bir iş bu arada).

Asla prependId="false" kullanın

Eğer bu hala işe yaramaz ise, o zaman eğer <h:form prependId="false"> kullanarak değilse doğrulayın. Bu ajax göndermek ve işlemek işlem sırasında başarısız olur. Ayrıca bu konuyla ilgili soru: JSF NamingContainer and UIForm with prependId.

Belirli yineleme başvuran bileşenleri yineleme yuvarlak

Uzun süre mümkün gibi <ui:repeat> <h:dataTable> gibi bileşenleri yineleme belirli yinelenen bir öğe başvurusu için değildi:

<h:form id="form">
    <ui:repeat id="list" value="#{['one','two','three']}" var="item">
        <h:outputText id="item" value="#{item}" /><br/>
    </ui:repeat>

    <h:commandButton value="Update second item">
        <f:ajax render=":form:list:1:item" />
    </h:commandButton>
</h:form>

Ancak, bu yana mojarra bağlamda 2.2.5 <f:ajax> başladı * (durdu doğrulama, böylece asla yüz soruyu bahsedilen durum artık; başka bir geliştirme düzeltme planlandı sonra).

Bu sadece henüz geçerli MyFaces 2.2.7 çalışmıyor ve 5.2 sürümleri PrimeFaces. Destek gelecek sürümlerde gelebilir. Bu arada, en iyi bahis yineleme bileşeni kendisi, ya da HTML, <ui:repeat> gibi işlemek değil diye bir üst güncelleme için.

PrimeFaces kullanarak, PFS update="@(.someclass)" düşünün

PrimeFaces Seçiciler (PFS) jQuery CSS seçici sözdizimi üzerinden başvuru bileşenleri sağlar. E. g. başvuru bileşenleri HTML çıktısı tüm ortak tarzı bir sınıf olması. Bu "" components. bir sürü başvuru için gereken durumlarda özellikle yararlıdır Bu hedef bileşenleri HTML çıktısı (sabit veya otomatik fark etmez) istemci KİMLİĞİ tüm bu sadece prerequires. Ayrıca How do PrimeFaces Selectors as in update="@(.myClass)" work? bkz

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BioHunta

    BioHunta

    28 Mayıs 2006
  • ExcelTutorials

    ExcelTutoria

    2 Mayıs 2009
  • isupportthegosselins

    isupporttheg

    6 Aralık 2009