【问题标题】:Submit main form without submitting an inner form提交主表单而不提交内部表单
【发布时间】:2012-04-21 03:23:24
【问题描述】:

我有一个包含内部表单的主表单(该内部表单仅出现在编辑案例中) 而且我希望两个表单相互分离,而不是提交主表单时内部没有提交,该怎么做?

这是一个sn-p:

<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时,内部表单也提交了,但是在提交内部表单时,main没有提交。

Desired Behavior:提交mainForm时不提交inner,提交inner时也没有提交main。

【问题讨论】:

    标签: html forms jsf jsf-2


    【解决方案1】:

    嵌套表单并不是您真正希望在页面中拥有的东西...

    这种方法怎么样?包装在两个面板中并使用 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>
    

    您可以放置​​任意数量的&lt;h:panelGroup,并将其 ID 添加到您的 f:ajax 的渲染执行中,例如 f:ajax execute="FirstPanel ThirdOne AnotherOne"...

    【讨论】:

    • 绝对应该避免嵌套表单。它们的行为是不可预测的,并且因浏览器而异。
    • 更准确地说,根据 HTML 规范,这是非法的。
    • 是否有其他解决方法,例如忽略innerForm中的验证或隐藏innerForm或在提交mainForm时阻止它提交?
    • 你真的不应该试图找到解决方法来启用非法行为,(我不知道有任何解决方法)
    【解决方案2】:

    我在IE9上遇到了内部表单的问题,表单的内容无法显示,所以我删除了内部表单并使用了icefaces的部分提交功能,并且解决了问题。

    【讨论】:

    • 嵌套表单在 HTML 中是非法的。您永远不应该在您的网页中使用它们。浏览器行为未指定。
    • @BalusC,是的,你是对的,我只是在和他们分享我的经验。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多