2017-08-02 69 views
0

的Primefaces文檔指出下面的代碼將是無效的,由於這樣的事實,每一個layoutUnit需要有自己的形式:PrimeFaces佈局和h:形式

 <p:layout fullPage="true"> 
     <h:form> 
      <p:layoutUnit position="north"> 
       <p:inputText value="#{testBean.input1}" /> 
      </p:layoutUnit> 
      <p:layoutUnit position="center"> 
       <p:inputText value="#{testBean.input2}" /> 
       <p:commandButton value="save" action="#{testBean.save}" /> 
      </p:layoutUnit> 
      <p:layoutUnit position="south"> 
       <p:inputText value="#{testBean.input3}" /> 
      </p:layoutUnit> 
     </h:form> 
    </p:layout> 

然而,當我巢號碼:佈局的內部形式,代碼工作沒有任何問題:

<h:form> 
     <p:layout fullPage="true"> 
       <p:layoutUnit position="north"> 
        <p:inputText value="#{testBean.input1}" /> 
       </p:layoutUnit> 
       <p:layoutUnit position="center"> 
        <p:inputText value="#{testBean.input2}" /> 
        <p:commandButton value="save" action="#{testBean.save}" /> 
       </p:layoutUnit> 
       <p:layoutUnit position="south"> 
        <p:inputText value="#{testBean.input3}" /> 
       </p:layoutUnit> 
     </p:layout> 
    </h:form> 

該行爲的解釋是什麼?我的方法是隻在p:layout之外使用單個窗體標籤,在某個時間點導致問題?

+0

你能指出您的第一款在PrimeFaces mentiond? – Kukeltje

+0

在Primeface文檔(https://www.primefaces。org/docs/guide/primefaces_user_guide_6_1.pdf,第309頁)。 – FP93

+0

你可以'接受'很好的答案! – Kukeltje

回答

1

的PrimeFaces文件並在Page 309 of the 6.1 documentation

確實狀態下使用的形式和全頁面佈局工作,避免使用含有layoutunits所產生的DOM可能是不一樣的形式。所以下面是 無效

而且他們引用你的第一個例子。從技術上講,這不是無效的,但由於佈局組件呈現瀏覽器所需的html(也許客戶端可以操作)來獲得良好的整頁體驗,它可能會(將來從未嘗試過)導致意外的行爲。

他們還規定

佈局單元必須它自己的形式代替,也避免嘗試更新,因爲同樣的原因,佈局單位,更新它的內容,而不是。

「必備」(以上強調的是我的)是強在這裏,他們最好都表示

        給每個佈局單元自身的形式,如果需要的一種形式佈局單元

現在,假設佈局不會與事物混淆並且例如整個頁面佈局的完整形式可能工作,添加部件到周圍的body標籤(如果它確實可以達到某種行爲),但我懷疑他們會給你保證。另外一個不這樣做的原因可能是,如果'部分頁面'的開發者沒有完全意識到'god form',你可以運行嵌套表單。所以我會建議反對它。

因此,如果例如南北佈局單元包含一些固定功能(包含搜索的頁眉,具有一些特徵的頁腳),然後將h:form直接放入佈局單元中。如果中心部分包​​含動態的事物,例如一個ui:include,把`h:表格放在包含的部分。

參見:

+0

好的,謝謝你的回答!這非常有幫助! – FP93