<h:form prependId="false" id="parentForm">
...
<h:form prependId="false" id="commentForm">
...
add comment
</h:form>
save
</h:form>
不起作用......
如果没有内部形式,当我只想添加注释时,父元素会被验证 “添加评论”应该只是验证评论,当点击“保存”时,应验证父级。
答案 0 :(得分:12)
嵌套表单在HTML中是非法的,因此在JSF中也是如此,因为它只是生成HTML。你需要把它们放在一起。
如果您在同一表单中有多个按钮,您希望在按某个按钮时跳过某些验证,则将immediate="true"
添加到相关按钮。这样,将跳过不的所有输入字段immediate="true"
。
更新:好的,您希望在单个表单中包含两个物理上独立的表单。如果将“神形式”分成多种形式并且各自自己的责任不是一种选择,那么有几种方法可以解决这个问题:
如果您不使用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>