Al2*_*l2x 3 forms validation jsf primefaces
我有一个包含很多组件的整个表单,包括ap:tab
当我点击p:commandButton id = c1来提交整个表单内容时:
什么是最好的解决方案?提前致谢.
你似乎正在使用"神形"反模式.所有东西都拼凑在一起<h:form>
.这是一个糟糕的设计/实践.最明智的方法是将字段和按钮放在单独的表单中,以便只有相关的字段和按钮是自己的形式,这样表单提交不会不必要地以其他形式提交/处理/转换/验证irrelvant数据.
如果由于某些(奇怪的?)设计限制而无法实现,那么至少还有其他两种方法:
如果您使用的是ajax,那么您可以使用该process
属性.它默认@form
处理整个表单.它接受一个空格分隔的输入字段的(相对)客户端ID字符串,您希望在提交期间处理该字符串.
<p:inputText id="field1" ... required="true" />
<p:inputText id="field2" ... required="true" />
...
<p:inputText id="field3" ... required="true" />
<p:inputText id="field4" ... required="true" />
...
<p:commandButton id="c1" ... process="field1 field2" />
...
<p:commandButton id="c2" ... process="field3 field4" />
Run Code Online (Sandbox Code Playgroud)
如果你没有使用ajax,或者想要非ajax后备,那么只需检查required
属性按下了哪个按钮.通过在请求参数映射中检查按钮的客户端ID的存在,这很容易.
<p:inputText id="field1" ... required="#{not empty param[c1.clientId]}" />
<p:inputText id="field2" ... required="#{not empty param[c1.clientId]}" />
...
<p:inputText id="field3" ... required="#{not empty param[c2.clientId]}" />
<p:inputText id="field4" ... required="#{not empty param[c2.clientId]}" />
...
<p:commandButton id="c1" binding="#{c1}" ... />
...
<p:commandButton id="c2" binding="#{c2}" ... />
Run Code Online (Sandbox Code Playgroud)
(注意:没有额外的bean属性必需c1
或c2
代码原样!)
另请参见如何让验证取决于按下的按钮?
您可以使用更自我记录的变量名来重构这一点:
<c:set var="c1ButtonPressed" value="#{not empty param[c1.clientId]}" />
<c:set var="c2ButtonPressed" value="#{not empty param[c2.clientId]}" />
...
<p:inputText id="field1" ... required="#{c1ButtonPressed}" />
<p:inputText id="field2" ... required="#{c1ButtonPressed}" />
...
<p:inputText id="field3" ... required="#{c2ButtonPressed}" />
<p:inputText id="field4" ... required="#{c2ButtonPressed}" />
...
<p:commandButton id="c1" binding="#{c1}" ... />
...
<p:commandButton id="c2" binding="#{c2}" ... />
Run Code Online (Sandbox Code Playgroud) 归档时间: |
|
查看次数: |
2192 次 |
最近记录: |