【发布时间】:2015-09-26 08:28:12
【问题描述】:
如何制作一些可以跳过网络所需验证的按钮(但我仍然想处理所有数据,所以立即等等不可能是真的)。
重要的是它必须是通用的。目前,我在每个必需的字段条件中使用一些请求参数。下面的代码示例
<p:inputText value="#{cc.attrs.data.exampleData1}"
required="#{param['onlySave'] == null}"/>
<p:inputText value="#{cc.attrs.data.exampleData2}"
required="#{param['onlySave'] == null}"/>
<p:inputText value="#{cc.attrs.data.exampleData3}"
required="#{param['onlySave'] == null}"/>
<p:commandButton value="Zapisz zmiany"
action="#{cc.attrs.controller.save()}"
update="@form">
<f:param name="onlySave" value="true"/>
</p:commandButton>
这个解决方案很好,因为我可以在每个页面中将此参数添加到按钮并跳过验证,但是当我的保存按钮没有进行任何重定向时,如果保存方法中的一些 java 验证失败,我只是添加一些没有重定向的消息,然后我从输入中丢失了所有必需的样式。
当验证失败或可能有更好的解决方案时,是否有可能在保存方法中将onlySave 参数设置为null?
编辑: Balus 的回答很好,但 bean 验证如下:
@Pattern(regexp = "^([^0-9]*)$", message = "only non numbers")
String field;
它处理 bean 超出该字段的所有数据。最好只忽略必需的字段属性,而不是验证等。
编辑2:
<tr>
<td class="label">
<p:outputLabel id="label" for="#{cc.attrs.componentId}" value="#{cc.attrs.label}"/>
</td>
<td class="value">
<cc:insertChildren/> --here component with componentId
</td>
</tr>
<tr class="errorMessage">
<td class="label"/>
<td class="value">
<p:message id="error" for="#{cc.attrs.componentId}" />
</td>
</tr>
【问题讨论】:
-
你的具体功能需求有点难以理解,但我相信你在找showcase.omnifaces.org/taghandlers/ignoreValidationFailed这是真的吗?
-
哇,几乎完美,只有一个问题。当我使用此标签并在某些字段中写入例如非数字字段 bean 中的数字时:@Pattern(regexp = "^([^0-9]*)$", message = "numbers!!") 它不会处理数据,因为它应该是。但是所有其他字段都被处理。它甚至没有给我任何信息。
-
那么,您的具体功能要求是从一个地方为给定类型的所有组件设置一个公共属性?也许你需要showcase.omnifaces.org/taghandlers/massAttribute?
-
当我点击 f:param 之类的特定按钮时,我是否能够更改大量参数的值?然后在自定义验证失败后,我可以在此特定按钮中使用的操作方法中再次更改其值吗?
-
如果它是一个引用期望值的EL表达式,是的。
标签: jsf jsf-2 primefaces