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

  • 本文关键字:表单 验证 jsf jsf-2
  • 更新时间 :
  • 英文 :

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

不工作…

没有内部表单,当我只想添加注释时,父元素得到验证。
"add comment"应该只是验证评论,当"save"被点击时,父元素应该被验证。

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

如果您有多个相同形式的按钮,您希望跳过某些按钮按下的某些验证,那么将immediate="true"添加到有问题的按钮。这样,所有而不是具有immediate="true"的输入字段将被跳过。

参见:

  • immediate属性的作用是什么?

Update: OK,你想要两个物理上独立的表单在一个表单中。如果分割"上帝形态"在多个表单中,每个表单都有自己的职责是不可选的,那么有几种方法可以绕过它:

如果您不使用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>

相关内容

  • 没有找到相关文章

最新更新