Hibernate Seam自定义验证

Hibernate Seam自定义验证,hibernate,validation,jakarta-ee,seam,Hibernate,Validation,Jakarta Ee,Seam,我正在尝试在Seam中实现一个自定义验证注释 我们有一个对象列表,我们称之为arrayA,arrayA根据今天的日期而不同 接下来我们有一个输入字段stringB,stringB是arrayA中的某个值,通过一个转换函数func(…) 因此,基本上,我们可以使用以下循环验证stringB: for(a : arrayA) { a.equals( funcC( stringB ) ) return true } return false 我的问题是,考虑到arrayA是动态的,我

我正在尝试在Seam中实现一个自定义验证注释

我们有一个对象列表,我们称之为arrayA,arrayA根据今天的日期而不同

接下来我们有一个输入字段stringB,stringB是arrayA中的某个值,通过一个转换函数func(…)

因此,基本上,我们可以使用以下循环验证stringB:

for(a : arrayA)
{
    a.equals( funcC( stringB ) )
    return true
}
return false
我的问题是,考虑到arrayA是动态的,我如何在seam中做到这一点?seam/hibernate验证注释似乎只接受常量作为输入。有人知道这个问题的解决方法吗


谢谢

首先,Java Server Faces,Seam使用的视图技术,是一种基于服务器端的组件技术。如果您有一个动态数组属性,那么我希望您正在更新JSF树(您可以在RichFaces或ICEFaces中使用Ajax4JSF-default)

如您的问题所示,您有一个复杂的验证(它不仅涉及属性,而且依赖于业务逻辑的处理)。因此,最好将其放在业务逻辑中。想想看


关于,

您始终可以从验证器中利用Seam的
组件.getInstance()
从上下文中获取数组。这假设您已经填充了包含此数组的基于Seam的Bean

例如:

或者,如果数组可以根据您验证的页面进行更改;然后,您可以始终使用
将值传递给验证器

例如:

[注意:如果传递
字符串[]
不起作用,则传递包含它的Bean。]

@Name("someValidator")
@Validator
public class SomeValidator implements javax.faces.validator.Validator {

  public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {

    MyArrayBean bean = (MyArrayBean)Component.getInstance("myArrayBean");
    String[] arrayA = bean.getArray();

    for(String a : arrayA) {
      //etc
    }
  }
}
<h:inputText value="#{someBean.stringB}">
    <f:validator validatorId="someValidator" />
    <f:attribute name="arrayA" value="#{myArrayBean.array}"/>
</h:inputText>
String[] arrayA = component.getValueExpression("arrayA").getValue(context.getELContext());