Seam / Hibernate验证器监听器

时间:2009-04-20 20:45:43

标签: java hibernate seam validation

我们在这里使用标准的SEAM设置...完成使用休眠的验证系统。

基本上发生的事情是用户在html输入中输入值,而seam使用hibernate验证验证他们输入的值。

大部分工作都很好,除了这里是我的问题:我们需要记录每个字段的验证结果,我无法找到一个好的方法来做到这一点...理想情况下,它可以通过与缝/休眠验证系统,只记录验证结果,但据我所知,有没有办法做到这一点?

过去有没有人做过这样的事情?有几个讨厌的工作,但我更喜欢干净利落。

快速概述我们现在正在为上下文发生的过程:

1)用户输入字段值 2)onblur值设置为ajax(a4j:support)此时验证器触发并重新渲染div,如果发生任何验证错误,它们现在在页面上可见

我希望在第二步发生的是'ValidationListener'或类似的东西,它将允许我们记录验证的结果。

感谢任何人都能提供帮助:o

2 个答案:

答案 0 :(得分:2)

您应该能够通过创建一个具有观察org.jboss.seam.validationFailed事件的方法的Bean来实现。然后,该方法可以执行您想要的任何日志记录。

@Name("validationObserver")
public class ValidationObserver() {

    @Observer("org.jboss.seam.validationFailed")
    public void validationFailed() {
        //Do stuff
    }
}

validationFailed事件不传递任何参数,所以如果你想记录错误是什么,你必须询问FacesMessages或者可能是Hibernate Validation框架本身。

答案 1 :(得分:0)

我只使用Hibernate进行验证,你可以按照Damo的建议在validationFailed()方法中使用Hibernate ClassValidator。
例如:

    public <T> InvalidValue[] validateWithHibernate(T object) {
        ClassValidator<T> validator = new ClassValidator(object.getClass());
        InvalidValue[] invalidValues = validator.getInvalidValues(object);
        return invalidValues;
    }