2012-04-08 85 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