2012-04-08 48 views
0

我有一個包含內部窗體的主窗體(內部窗體僅出現在編輯框中) 我希望兩個窗體都可以相互分離,而不是提交主窗體內在不提交,怎麼辦?未提交內部表單提交主窗體

這裏有一個片段:

<h:form id="mainForm"> 

    <!-- some inputs here --> 

    <h:commandButton value="submit main" action="#{myBean.mainSubmit()}" /> 

<h:panelGroup rendered="#{myBean.editMode}"> 
    <h:form id="innerForm"> 
     <!-- some inputs here --> 

     <h:commandButton value="submit inner" action="#{myBean.innerSubmit()}" /> 
    </h:form> 
</h:panelGroup> 

</h:form> 

當前行爲:提交的MainForm當內表單提交過,但提交的內在形式主要是未提交時。

想要的行爲:在提交mainForm時,內部沒有被提交,當提交內部時,主體也不會被提交。

回答

3

嵌套的表格是不是你真的想要在你的網頁...

這個怎麼樣的做法?包裝在兩個面板,並使用AJAX來執行/使其

<h:form id="mainForm"> 
<h:panelGroup id="FirstPanel" rendered="#{myBean.editMode}"> 
    <!-- some inputs here --> 
    <h:commandButton value="submit main" action="#{myBean.mainSubmit()}" > 
     <f:ajax execute="FirstPanel" render="FirstPanel"></f:ajax> 
    </h:commandButton> 
</h:panelGroup> 

<h:panelGroup id="SecondPanel" rendered="#{myBean.editMode}"> 
    <!-- some inputs here --> 
    <h:commandButton value="submit inner" action="#{myBean.innerSubmit()}" > 
     <f:ajax execute="SecondPanel" render="SecondPanel"></f:ajax> 
    </h:commandButton> 
</h:panelGroup> 
</h:form> 

你可以把儘可能多的<h:panelGroup要並添加相應的ID在渲染執行你的F:AJAX例如f:ajax execute="FirstPanel ThirdOne AnotherOne" ...

+0

絕對應該避免嵌套形式。他們的行爲是不可預測的,並且因瀏覽器而異。 – 2012-04-08 10:20:42

+2

更確切地說,按照HTML規範是非法的。 – BalusC 2012-04-08 10:56:25

+0

是否有任何其他解決方法,如忽略innerForm中的驗證,或隱藏innerForm或阻止它在提交mainForm時提交? – 2012-04-08 11:46:43

0

我在IE9的內部表單遇到問題,表單的內容不可顯示,因此我刪除了內部表單並使用了icefaces的partialSubmit功能,並解決了問題。

+2

嵌套表單在HTML中是非法的。你永遠不應該在你的網頁上。瀏覽器行爲未指定。 – BalusC 2012-04-22 12:47:17

+0

@BalusC,是的,你是對的,我只是與他們分享我的經驗。 – 2012-04-22 13:13:41