<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>