<p:commandXxx process>
<p:ajax process>
<f:ajax execute>
process
Nitelik sunucu tarafı ve sadece etkileyebilir UIComponent
uygulayan s EditableValueHolder
(giriş alanları) veya ActionSource
(komut alanları). process
Özelliği, bileşenlerin tam olarak üzerine tüm MTU yaşam döngüsü boyunca işlenmesi gereken müşteri kimlikleri, bir boşluk ile ayrılmış listesini kullanarak, JSF söyler (kısmi) formunda göndermek.
JSF daha sonra istek değerlerini uygular (bileşenin kendi istemci kimliğine göre HTTP istek parametresini bulur ve ardından EditableValueHolder
bileşenler durumunda gönderilen değer olarak ayarlar veya bileşenler ActionEvent
durumunda yeni bir kuyruk ActionSource
oluşturur), dönüştürme, doğrulama ve model değerlerini güncelleme ( EditableValueHolder
yalnızca bileşenler) ve son olarak kuyruğa alınanları çağırır ActionEvent
( ActionSource
yalnızca bileşenler). JSF, process
öznitelik kapsamında olmayan diğer tüm bileşenlerin işlenmesini atlayacaktır . Ayrıca, başvuru istek değerleri aşamasında rendered
özniteliği değerlendirilen bileşenler false
de kurcalanmış isteklere karşı korumanın bir parçası olarak atlanacaktır.
Şu nedenlerden dolayı olduğunu Not ActionSource
(örneğin bileşenler <p:commandButton>
de bileşenin kendisini dahil olması çok önemlidir) process
Eğer bileşeni ile ilişkili işlemi çağırmak niyetinde, özellikle öznitelik. Bu nedenle, belirli bir komut bileşeni çağrıldığında yalnızca belirli giriş bileşenlerini işlemeyi amaçlayan aşağıdaki örnek çalışmaz:
<p:inputText id="foo" value="#{bean.foo}" />
<p:commandButton process="foo" action="#{bean.action}" />
Sadece işlemek olur #{bean.foo}
ve değil#{bean.action}
. Komut bileşeninin kendisini de eklemeniz gerekir:
<p:inputText id="foo" value="#{bean.foo}" />
<p:commandButton process="@this foo" action="#{bean.action}" />
Ya da, görünüşe göre, @parent
ortak bir ebeveyne sahip olan tek bileşen olup olmadıklarını kullanarak :
<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>
Veya, her ikisi de ana UIForm
bileşenin tek bileşenleri olursa , şunları da kullanabilirsiniz @form
:
<h:form>
<p:inputText id="foo" value="#{bean.foo}" />
<p:commandButton process="@form" action="#{bean.action}" />
</h:form>
Formda, işlemde atlamak istediğiniz daha fazla girdi bileşeni varsa, başka bir girdi bileşenini veya geçerli girdi bileşenini temel alan bir UI bölümünü güncellemek istediğinizden daha sık bu bazen istenmeyen bir durumdur. ajax dinleyici yöntemi. Diğer giriş bileşenlerindeki doğrulama hatalarının ajax dinleyici yönteminin yürütülmesini engellemesini istemezsiniz.
Sonra @all
. Bunun process
özellikte özel bir etkisi yoktur , sadece update
özellikte vardır. A process="@all"
tam olarak aynı şekilde davranır process="@form"
. HTML zaten aynı anda birden çok form göndermeyi desteklemiyor.
Bu arada @none
, kesinlikle hiçbir şey işlemeniz gerekmemesi durumunda yararlı olabilecek bir de vardır, ancak yalnızca belirli bölümleri update
, özellikle içeriği gönderilen değerlere veya eylem dinleyicilerine bağlı olmayan bölümler aracılığıyla güncellemek istersiniz .
Gibi olmalıdır kaydeden process
öznitelik vardır bir HTTP isteği bilgisi (istek parametrelerinin miktarı) üzerinde etki. Yani, HTML temsilini içeren "her şeyi" gönderme varsayılan HTML davranışı <h:form>
etkilenmez. Büyük bir formunuz varsa ve HTTP isteği yükünü yalnızca işlemede kesinlikle gerekli olanlara, yani yalnızca process
öznitelik kapsamında olanlara azaltmak istiyorsanız , partialSubmit
özniteliği PrimeFaces Ajax bileşenlerinde <p:commandXxx ... partialSubmit="true">
veya olarak ayarlayabilirsiniz <p:ajax ... partialSubmit="true">
. Bu 'global olarak' düzenleyerek web.xml
ve ekleyerek de yapılandırabilirsiniz.
<context-param>
<param-name>primefaces.SUBMIT</param-name>
<param-value>partial</param-value>
</context-param>
Alternatif olarak, <o:form>
bu davranışı varsayılan OmniFaces 3.0+ kullanabilirsiniz .
PrimeFaces spesifik standart MTU eşdeğer process
olduğunu execute
den <f:ajax execute>
. PrimeFaces'ın yaptığı gibi virgülle ayrılmış bir dizeyi desteklememesi dışında tamamen aynı şekilde davranır (kişisel olarak yalnızca boşlukla ayrılmış konvansiyona sadık kalmayı öneririm) veya @parent
anahtar kelime. Ayrıca, <p:commandXxx process>
varsayılan olarak @form
while <p:ajax process>
ve <f:ajax execute>
varsayılan olarak bilmek yararlı olabilir @this
. Son olarak, process
"PrimeFaces Seçicileri" olarak adlandırılanları desteklediğini bilmek de yararlıdır , ayrıca bkz. PrimeFaces Seçicileri update = "@ (. MyClass)" daki gibi nasıl çalışır?
<p:commandXxx update>
<p:ajax update>
<f:ajax render>
update
Nitelik istemci tarafı ve tüm HTML sunumunu etkileyebilir UIComponent
s. update
Nitelik JavaScript söyler, HTML DOM ağacı muhtaç parçalar forma göndermek için tepki olarak güncellenmesine müşteri kimlikleri, bir boşlukla ayrılmış listesini kullanarak (ajax isteği / tepkisini işlemek için sorumlu bir).
JSF daha sonra yalnızca güncellenmesi istenen parçaları içeren doğru ajax yanıtını hazırlayacaktır . JSF update
, ajax yanıtında özniteliğin kapsamadığı diğer tüm bileşenleri atlayarak yanıt yükünü küçük tutar. Ayrıca, oluşturma yanıtı aşamasında rendered
niteliği değerlendirilen bileşenler false
atlanacaktır. Geri dönmesine rağmen true
JavaScript'in başlangıçta HTML DOM ağacında güncelleyemeyeceğini unutmayın false
. Bunun yerine sarmanız veya üst öğesini güncellemeniz gerekir. Ayrıca bkz. Ajax güncelleme / render özelliği oluşturulan bir bileşen üzerinde çalışmaz .
Genellikle, yalnızca (kısmi) form gönderildikten sonra istemci tarafında gerçekten "yenilenmesi" gereken bileşenleri güncellemek istersiniz . Aşağıdaki örnek, üst formun tamamını şu şekilde günceller @form
:
<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
özelliğin @form
zaten varsayılan olarak atlandığını unutmayın )
Bu işe yarayabilse de, giriş ve komut bileşenlerinin güncellenmesi bu örnekte gereksizdir. Model değerlerini foo
ve bar
inside action
yöntemini değiştirmediğiniz sürece (bu da UX perspektifinde sezgisel olmayacaktır), bunları güncellemenin bir anlamı yoktur. Mesaj bileşenleri gerçekten güncellenmesi gereken bileşenlerdir :
<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, birçoğunuz olduğunda bu sıkıcı olur. PrimeFaces Seçicilerinin var olmasının nedenlerinden biri de budur. Bu ileti bileşenleri, oluşturulan HTML çıktısında ortak bir stil sınıfına sahiptir ui-message
, bu nedenle aşağıdakiler de yapılmalıdır:
<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>
(kimlikleri ileti bileşenlerinde tutmanız gerektiğini unutmayın, aksi takdirde @(...)
çalışmaz! Yine, bkz. PrimeFaces Seçicileri update = "@ (. myClass)" daki gibi nasıl çalışır? ayrıntılar için)
@parent
Böylece cari bileşeni ve tüm kardeşleri ve çocukları kapsayan tek ebeveyn bileşeni, günceller. Formu aklı başında gruplar halinde kendi sorumlulukları ile ayırdıysanız, bu daha yararlıdır. @this
Güncellemeler, belli ki, sadece mevcut bileşeni. Normalde, bu yalnızca bileşenin eylem yöntemindeki kendi HTML özelliklerinden birini değiştirmeniz gerektiğinde gereklidir. Örneğin
<p:commandButton action="#{bean.action}" update="@this"
oncomplete="doSomething('#{bean.value}')" />
Üzerinde değişiklik oncomplete
yapılan çalışma ihtiyaçlarının , bileşen güncellenmezse, bu yapının , oluşturulan HTML çıktısının bir parçası olan basit bir nedenden dolayı işe yaramayacağını düşünün (ve buradaki tüm EL ifadeleri değerlendirilir. render yanıtı sırasında).value
action
oncomplete
@all
Dikkatle kullanılması gereken belgenin tamamını, günceller. Normalde, bunun yerine bir düz bağlantı (ya bu için gerçek bir GET isteğinde kullanmak istiyorum <a>
ya <h:link>
) ya da bir yönlendirme-sonra-POST ?faces-redirect=true
veya ExternalContext#redirect()
. Efektlerde, process="@form" update="@all"
ajax olmayan (kısmi olmayan) bir gönderme ile tamamen aynı etkiye sahiptir. Tüm JSF kariyerim boyunca, karşılaştığım tek mantıklı kullanım durumu @all
, bir ajax isteği sırasında istisna olması durumunda bir hata sayfasını bütünüyle görüntülemektir. Ayrıca bkz . AJAXified bileşenleri için JSF 2.0 özel durumlarıyla başa çıkmanın doğru yolu nedir?
PrimeFaces spesifik standart MTU eşdeğer update
olduğunu render
den <f:ajax render>
. PrimeFaces'ın yaptığı gibi virgülle ayrılmış bir dizeyi desteklememesi dışında tamamen aynı şekilde davranır (kişisel olarak yalnızca boşlukla ayrılmış konvansiyona sadık kalmayı öneririm) veya @parent
anahtar kelime. Hem update
ve render
varsayılan olarak @none
(yani, "hiçbir şey").
Ayrıca bakınız: