OmniFaces相当于Seam <s:validateform>来验证多个字段</s:validateform>

时间:2015-02-11 14:23:58

标签: validation jsf omnifaces

接缝面中的

是整个表单验证的选项。 我可以导入:

xmlns:s="http://jboss.org/seam/faces"

并使用:

<s:validateForm validatorId="oneOrMorePrimaryIndicesValidator"/>

现在我们必须使用omnifaces而不是seamfaces。

在做同样工作的omnifaces中有没有相同的东西?

1 个答案:

答案 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中找到componentsmessageinvalidateAllshowMessageFor属性。


完全不同的替代方法是将<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" />

如果没有当前模型和验证器的具体代码,很难给出一个更具体的例子。