在接缝面中可以选择验证整个表单。 我可以导入:
xmlns:s="http://jboss.org/seam/faces"
并使用:
<s:validateForm validatorId="oneOrMorePrimaryIndicesValidator"/>
现在我们必须使用全向面而不是接缝面。
omnifaces 中是否有等效的功能可以完成类似的工作?
最佳答案
取决于问题中并不完全清楚的具体功能要求。
如果您想验证一个或多个字段是否已填写,请使用现有的 <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
.
无论哪种方式,一般使用说明,例如components
, message
, invalidateAll
和showMessageFor
属性可以在 ValidateMultipleFields
中找到javadoc。
完全不同的替代方法是使用 <o:validateBean>
使用 JSR303 bean 验证组来使用 JSR303 ConstraintValidator<SomeGroupAnnotation, Bean>
在类级别验证实体。这样的验证器不仅可以在 JSF(Web 层)中使用,而且还可以在例如 Web 层中使用。 JPA(数据层)。例如
<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" />
如果没有当前模型和验证器的具体代码,很难给出更具体的示例。
关于validation - OmniFaces 相当于 Seam <s :validateForm> to validate multiple fields,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28456698/