2012-11-22 72 views
0

我需要需要通過<h:form>爲了擠包被<p:ajax>
一些primeface元素的任何行動進行更新,即使他們有ID primefaces元素的列表,並在<p:ajax update="thisID">它仍然需要一個<h:form>與命令被更新,以便其元件需要<h:form>和whick不PrimeFaces需要^ h元素:形成要更新

回答

-1

每個組件提交/從/到後臺bean接收內容需要由<h:form>被包裝的ID。

所以你想要更新或每個按鈕/鏈接設置的東西都需要在表單內。這也不是Primefaces的事情。這條規則也適用於普通的JSF。

+0

謝謝,但如果我想更新值與複選框例如,而不是一個按鈕/鏈接
雖然我已經看到一些外部的JSF源代碼更新元素沒有h:form,所以我認爲一些JSF元素作爲h :form,所以這是我的問題是否有任何JSF元素行爲像h:如果是的話,他們是什麼? – pFace

+1

從支持bean接收內容的所有內容都不需要完全包裝在表單中。只有需要提交的內容需要用表單包裝。它在純樸的香草HTML中也是如此(這正是JSF最終也產生的)。 – BalusC

2

這是對PatrickT答案的輕微修改。你也可以更新表單之外的東西。但是你想提交的數據應該是表單afaik的一部分。

<p:messages id="outsideForm" showDetail="true"></p:messages> 
<h:form id="kalle"> 
<p:messages id="insideForm" showDetail="true"></p:messages> 
    <p:inputText required="true"></p:inputText> 
    <p:commandButton value="submit" update=":outsideForm,insideForm"/> 
</h:form> 
+0

謝謝,但我更喜歡,如果有一個元素列表,如,你包括 – pFace

+0

tbh,我不知道任何組件需要被更新的表單內。只有想要提交數據的組件需要位於表單內。但猜猜我們需要等待一個jsf專家權衡這個:) –

6

爲了這一點,實施the EditableValueHolder interfacethe ActionSource interface需要的所有組件被封閉在an UIForm component

在前面介紹的Javadoc中,您可以在「所有已知實現類」中找到哪些組件實現它們的指示。如果你仔細觀察,你會發現它是所有輸入組件,如inputTextselectOneMenu等,並命令組件一樣commandLinkcommandButton等。在PrimeFaces API documentation,例如它代表了InputText<p:inputText>實現EditableValueHolder,所以應該被放置在一個表格中。

這也完全按照plain vanilla HTML都有,HTML <input><select><textarea>等應該在一個<form>爲了得到價值將被髮送到服務器端相同rerequirement。畢竟,HTML也是JSF最終產生的。

至於用ajax更新元素,將要更新的組件需要放置在表單中並不是真的。您可以完美地更新當前表單之外的內容。你甚至可以更新其他表格。

+0

它看起來像主面還有一個額外的要求,即待更新組件必須在原始請求中呈現,以便它們被更新阿賈克斯響應。在本質上,這可以防止基於用戶提交的初始數據呈現具有其自己形式的頁面的某個部分的用例。 – Saasira