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
<p:commandXxx process>
<p:ajax process>
<f:ajax execute>
process
öznitelik, sunucu taraflı ve sadece UIComponent
s ** 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 UIComponent
ler. 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:
- Cannot find component with expression "foo" referenced from "bar" - <f:ajax> contains unknown id "foo" cannot locate it in context of component "bar"
- Execution order of events when pressing PrimeFaces p:commandButton
- How to decrease request payload of p:ajax during e.g. p:dataTable pagination
- How to show details of current row from p:dataTable in a p:dialog
&Quot;sp_reset_connection" exec; S...
Tortoise SVN: çatışma 'onlarınki ...
Nasıl otomatik güncelleme uygulamak ge...
1093 - 't belirtin güncelleme içi...
Güncelleme 22.0.1 gelen 22.0.4(Son Sür...