SORU
16 AĞUSTOS 2014, CUMARTESİ


PrimeFaces anlama süreci ve güncelleme öznitelikleri

Tam olarak nedir process ve PrimeFaces UICommand bileşenleri update? Doğrulama sırasında çalışır? update öznitelik arka uç bileşen değeri güncellemek yerine ne yapar? process model bağlama öznitelik değeri? Tam olarak her iki öznitelikleri@this, @parent, @all ve @form ne?

Aşağıdaki örnek, iyi çalışıyor, ama temel kavramlar biraz karıştı.

<p:commandButton process="@parent"
                 update="@form"
                 action="#{bean.submit}" 
                 value="Submit" />

CEVAP
17 AĞUSTOS 2014, Pazar


<p:commandXxx process> <p:ajax process> <f:ajax execute>

process öznitelik, sunucu taraflı ve sadece UIComponents ** 109 (girdi alanları) veya ActionSource (komut alanları) uygulama etkileyebilir. process öznitelik AKSARAY, bileşenleri tam olarak (kısmi) form üzerine tüm AKSARAY ömrü boyunca işlenmesi gereken bir istemci kimlik boşlukla ayrılmış bir liste kullanarak anlatır.

AKSARAY sonra uygulamak isteği değerler (bulgu HTTP isteği parametre temel bileşenin kendi istemci KİMLİĞİ ve sonra da ayar olarak gönderilen değer diye EditableValueHolder bileşenleri veya kuyruk yeni ActionEvent durumunda ActionSource bileşenleri), gerçekleştirmek dönüştürme, doğrulama ve güncelleme model değerleri (EditableValueHolder bileşenleri sadece) ve nihayet çağır sırada ActionEvent (ActionSource bileşenleri sadece). AKSARAY process öznitelik kapsamına girmeyen tüm diğer bileşenleri işleme atlar. Ayrıca, geçerli talep değerleri aşamasında false veren olan bileşenler de tahrif isteklerine karşı korumak bir parçası olarak atlandı.

Not bu durumda ActionSource bileşenleri (gibi <p:commandButton>) çok önemli olduğunu sen de dahil bileşeni kendi içinde process öznitelik, özellikle eğer niyetinde çağırmak için eylem ile ilişkili bileşeni. Belirli bir komut bileşeni çağrıldığında sadece belirli giriş bileşen(ler) işlemek niyetinde olan örnekte işe yaramaz:

<p:inputText id="foo" value="#{bean.foo}" />
<p:commandButton process="foo" action="#{bean.action}" />

Sadece #{bean.foo} süreç olacaktırdeğil#{bean.action}. Komut bileşeni kendisi de dahil etmeniz gerekecek:

<p:inputText id="foo" value="#{bean.foo}" />
<p:commandButton process="@this foo" action="#{bean.action}" />

Ya da, görünüşe göre, @parent kullanmayı öğrendi gibi ortak bir ebeveynin olması sadece bileşenleri iseler:

<p:panel><!-- Type doesn't matter, as long as it's a common parent. -->
    <p:inputText id="foo" value="#{bean.foo}" />
    <p:commandButton process="@parent" action="#{bean.action}" />
</p:panel>

Ya da, eğer ikisi de UIForm ana bileşenin tek bileşenleri olursa, o zaman da @form kullanabilirsiniz:

<h:form>
    <p:inputText id="foo" value="#{bean.foo}" />
    <p:commandButton process="@form" action="#{bean.action}" />
</h:form>

Bu bazen istenmeyen formu içerir daha fazla giriş bileşenleri olan istediğin geçin işleme, daha sık durumlarda dilerseniz bu güncelleme başka bir giriş bileşen(ler) ya da bazı UI bölümüne göre geçerli giriş bileşeni bir ajax dinleyici yöntemi. Yani diğer giriş bileşenleri doğrulama hataları yürütülen ajax dinleyici yöntemini engelleyen istemiyorum.

@all var. Bu process öznitelik hiçbir özel efekt, ama update öznitelik yalnızca vardır. process="@all" process="@form" tam olarak aynı şekilde davranır. HTML aynı anda birden fazla form zaten göndererek destek yok.

Bu arada da @none var kesinlikle herhangi bir işlem gerekmez durumda yararlı olabilir, ancaksadeceupdate gönderilen değerler veya eylem dinleyicileri bağlı değildir kimin özellikle bu bölümler üzerinden belirli bazı bölümleri güncellemek istiyorum.

Standart JSF PrimeFaces process belirli eşdeğer <f:ajax execute> 56*. Davranır aynı dışında değil destek virgülle ayrılmış dize ise PrimeFaces yapar (her ne kadar ben şahsen tavsiye için sadece sopa için boşluk ile ayrılmış olarak kabul edilen), ne de @parent anahtar kelime. Ayrıca, <p:ajax process> 62* 63* *varsayılanları <p:commandXxx process> varsayılan olarak 60 ** için bilmek yararlı olabilir. Son olarak da process sözde destekleyen bilmek faydalı oluyor "" Ayrıca Bkz 113**. PrimeFaces Seçiciler


<p:commandXxx update> <p:ajax update> <f:ajax render>

update öznitelik, istemci tarafı ve tüm HTML gösterimi etkileyebilir UIComponentler. update öznitelik bildirir JavaScript (sorumlu işleme ajax istek/yanıt), kullanarak bir boşlukla ayrılmış listesi istemci Kimliği, hangi bölgelerinde HTML DOM ağacı olmalı güncellenen yanıt formu gönderin.

AKSARAY sonra bunun için ajax doğru yanıtı içeren hazırlayacaktırsadeceistenen parçaları güncellemek için. AKSARAY update öznitelik kapsamına girmeyen tüm diğer bileşenleri ajax yanıt olarak, bu vesile ile yanıt yükü küçük tutmak atlar. Ayrıca, bir hale tepki aşamasında false değerlendirir kimin bileşenleri atlandı. true JavaScript döndüremez olsa bile eğer başlangıçta false eğer HTML DOM ağacında güncelleme unutmayın. Sarın ya da üst yerine değiştirmelisiniz. Ayrıca Ajax update/render does not work on a component which has rendered attribute bkz.

Genellikle, güncellemek istiyorumsadecehangi bileşenlerigerçekten""(kısmi) istemci tarafı üzerine formu gönderin. yenilenmesi gerekiyor @form) tüm üst formu: güncelleştirmeleri aşağıdaki örnek

<h:form>
    <p:inputText id="foo" value="#{bean.foo}" required="true" />
    <p:message id="foo_m" for="foo" />
    <p:inputText id="bar" value="#{bean.bar}" required="true" />
    <p:message id="bar_m" for="bar" />
    <p:commandButton action="#{bean.action}" update="@form" />
</h:form>

(process nitelik @form o zaten varsayılan) olarak ihmal olduğunu unutmayın

Bu iyi çalışabilir iken, giriş ve komut bileşenleri güncelleştirme bu belirli bir örnek gereksiz. Modeli action yöntemin foo bar teslim UX bakış açısı sezgisel olmayan) değerleri değiştirmezseniz, bunları güncelleştirmek için bir anlamı yok. İleti bileşenleri olan sadecegerçektengerek güncelleştirilmesi için:

<h:form>
    <p:inputText id="foo" value="#{bean.foo}" required="true" />
    <p:message id="foo_m" for="foo" />
    <p:inputText id="bar" value="#{bean.bar}" required="true" />
    <p:message id="bar_m" for="bar" />
    <p:commandButton action="#{bean.action}" update="foo_m bar_m" />
</h:form>

Ancak, bu çoğu zaman sıkıcı olur. Bu PrimeFaces Seçiciler var nedenlerinden biri. Bu ileti bileşenleri oluşturulan HTML çıktısı aşağıdaki de yapayım ui-message ortak tarzı bir sınıf var:

<h:form>
    <p:inputText id="foo" value="#{bean.foo}" required="true" />
    <p:message id="foo_m" for="foo" />
    <p:inputText id="bar" value="#{bean.bar}" required="true" />
    <p:message id="bar_m" for="bar" />
    <p:commandButton action="#{bean.action}" update="@(.ui-message)" />
</h:form>

(ileti Kimliği bileşenleri, aksi takdirde @(...) tutmak gerektiğini unutmayın işe yaramaz! Yine How do PrimeFaces Selectors as in update="@(.myClass)" work? ayrıntı için bakınız)

Böylece akım bileşeni kapsayan @parent güncelleştirmeleri, yalnızca ana bileşeni, ve tüm kardeşleri ve onların çocukları. Bu takdirde her biri kendi sorumluluk aklı başında gruplar şeklinde ayrılmış varsa daha yararlı olur. @this güncelleştirmeleri, belli ki, yalnızca geçerli bileşeni. Normalde, bu eylem yöntemi bileşenin kendi HTML özelliklerinden biri de değiştirmek istediğinizde gereklidir. E. g.

<p:commandButton action="#{bean.action}" update="@this" 
    oncomplete="doSomething('#{bean.value}')" />

Hayal oncomplete ihtiyaçları ile çalışma value değişen action, o zaman bu yapı işe yaramaz mıydı bileşenin güncelleştirilmiş değil, nedeni cok basit oncomplete parçası oluşturulan HTML çıktısı (ve böylece tüm EL ifadelerde var değerlendirdi sırasında işlemek yanıt).

@all güncelleştirmeleri dikkat edilmesi gereken tüm doküman,. Normalde, istediğin gibi kullanmak için gerçek bir istek ALMAK için bu yerine göre ya bir düz bağlantı (<a> <h:link>) ya da yönlendirme-sonra-postayla ?faces-redirect=true veya ExternalContext#redirect(). Etkileri, 99* *non-ajax (non-kısmi) teslim tam olarak aynı etkiye sahiptir. Tüm AKSARAY kariyerimde @all karşılaştığım en mantıklı kullanma durumu bir istisna bir ajax isteği sırasında oluşması durumunda bütünüyle bir hata sayfası görüntülemek için. Ayrıca What is the correct way to deal with JSF 2.0 exceptions for AJAXified components? bkz

Standart JSF PrimeFaces update belirli eşdeğer <f:ajax render> 102*. Davranır aynı dışında değil destek virgülle ayrılmış dize ise PrimeFaces yapar (her ne kadar ben şahsen tavsiye için sadece sopa için boşluk ile ayrılmış olarak kabul edilen), ne de @parent anahtar kelime. @none update ve render varsayılanları hem, ("hiçbir şey").


Ayrıca Bkz:

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BurnedInDotCom

    BurnedInDotC

    3 NİSAN 2010
  • CodingMadeEasy

    CodingMadeEa

    25 EYLÜL 2010
  • Mega64

    Mega64

    24 ŞUBAT 2006