1

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

基本上发生的情况是用户在 html 输入中输入一个值,然后 seam 使用休眠验证验证他们输入的值。

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

过去有没有人做过这样的事情?有一些令人讨厌的解决方法,但我更愿意干净地做。

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

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

我希望在第 2 步发生的是“ValidationListener”或类似的调用,这将允许我们记录验证的结果。

谢谢,如果有人能够提供帮助:o

4

2 回答 2

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 框架本身。

于 2009-04-21T09:14:53.433 回答
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;
    }
于 2009-05-20T11:53:34.293 回答