表单中的表单:跳过父表单的验证

2024-05-14

<h:form prependId="false" id="parentForm">
    ...
    <h:form prependId="false" id="commentForm">
        ...
        add comment
    </h:form>
    save
</h:form>

不起作用...

如果没有内部表单,当我只想添加注释时,父级的元素就会得到验证。
“添加评论”应该只验证评论,当单击“保存”时,应该验证父级。


嵌套表单在 HTML 中是非法的,在 JSF 中也是如此,因为它所做的只是生成 HTML。您需要将它们放在一起。

如果您有多个相同形式的按钮,并且您想在按下某些按钮时跳过某些验证,请添加immediate="true"到有问题的按钮。这样所有的输入字段都可以not have immediate="true"将被跳过。

也可以看看:

  • 是什么immediate属性用于? https://stackoverflow.com/questions/4731740/doubt-on-immediate-attribute-for-command-button

Update:好的,您希望在一个表单中包含两个物理上独立的表单。如果无法将“神形态”拆分为多种形式并各自负责,那么有几种方法可以解决这个问题:

如果你不使用 Ajax 并且你只有一个required="true"在按下某个按钮时您实际上想要使其成为非必需的输入元素上,然后执行以下操作:

<h:form>
    ...
    <h:commandButton value="Submit form but but do not validate comment" />
    ...
    <h:inputTextarea id="comment" required="#{not empty param[foo.clientId]}" immediate="true" />
    <h:commandButton binding="#{foo}" value="Submit and validate comment" immediate="true" />
</h:form>

如果你实际使用Ajax,那么只需在中指定执行区域即可execute属性。

<h:form>
    <h:panelGroup id="other">
        ....
        <h:commandButton value="Submit form but but do not validate comment">
            <f:ajax execute="other" render="other" />
        </h:commandButton>
    </h:panelGroup>
    <h:panelGroup id="comments">
        <h:inputTextarea required="#{not empty param[foo.clientId]}" />
        <h:commandButton value="Submit and validate comment by ajax">
            <f:ajax execute="comments" render="comments" />
        </h:commandButton>
    </h:panelGroup>
</h:form>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

表单中的表单:跳过父表单的验证 的相关文章

随机推荐