是整个表单验证的选项。 我可以导入:
xmlns:s="http://jboss.org/seam/faces"
并使用:
<s:validateForm validatorId="oneOrMorePrimaryIndicesValidator"/>
现在我们必须使用omnifaces而不是seamfaces。
在做同样工作的omnifaces中有没有相同的东西?
答案 0 :(得分:3)
取决于具体的功能要求,这个问题并不完全清楚。
如果要验证是否填写了一个或多个字段,请使用现有的<o:validateOneOrMore>
:
<o:validateOneOrMore components="foo bar baz" />
<h:inputText id="foo" />
<h:inputText id="bar" />
<h:inputText id="baz" />
或者,如果要为多个字段实现自定义验证程序,请使用<o:validateMultiple>
:
<o:validateMultiple components="foo bar baz" validator="#{oneOrMorePrimaryIndicesValidator}" />
<h:inputText id="foo" />
<h:inputText id="bar" />
<h:inputText id="baz" />
其中#{oneOrMorePrimaryIndicesValidator}
指的是实现MultiFieldValidator
的托管bean(可以是JSF或CDI):
@Named
@RequestScoped // Can also be @ApplicationScoped, depending on if validator should hold state.
public class OneOrMorePrimaryIndicesValidator implements MultiFieldValidator {
@Override
public boolean validateValues(FacesContext context, List<UIInput> components, List<Object> values) {
// ...
}
}
如果值无效,则应返回false
,否则true
。
无论哪种方式,一般使用说明,例如:可以在ValidateMultipleFields
javadoc中找到components
,message
,invalidateAll
和showMessageFor
属性。
完全不同的替代方法是将<o:validateBean>
与JSR303 bean验证组一起使用,以使用JSR303 ConstraintValidator<SomeGroupAnnotation, Bean>
验证类级别的实体。这样的验证器不仅可用于JSF(Web层),而且可用于例如JPA(数据层)。 E.g。
<h:inputText value="#{bean.entity.foo}" />
<h:inputText value="#{bean.entity.bar}" />
<h:inputText value="#{bean.entity.baz}" />
<o:validateBean value="#{bean.entity}" validationGroups="com.example.SomeGroup" />
如果没有当前模型和验证器的具体代码,很难给出一个更具体的例子。