0

我正在尝试 ConstraintViolationException 并创建了一个简单的约束电子邮件并为其实现了验证器:

EmailValidator implements ConstraintValidator<Email, String> { }

我的问题是当我从 entityManager 调用persist 时,它没有捕获异常。我查看了 ConstraintViolationException,发现祖先类是 RuntimeException,所以它没有被选中,但我很困惑,因为我看到很多文章都捕获了相同的异常。

任何人有任何意见和解决方法?

4

1 回答 1

0

这个链接解决了我的问题:Catch PersistenceException or ConstraintViolationException in JBoss AS 7

然后作为一种解决方法,我创建了一个电子邮件验证器并将一个 f:validator 添加到我正在验证的字段中。

@FacesValidator("emailValidator")
public class EmailValidator implements Validator {

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

    ResourceBundle resourceBundle = ResourceBundle.getBundle("messages",
            Locale.ENGLISH);

    if (StringUtils.isBlank(value)) {
        return;
    } else {
        try {
            InternetAddress emailAddr = new InternetAddress(
                    value.toString());
            emailAddr.validate();
        } catch (AddressException ex) {
            FacesMessage facesMessage = new FacesMessage();
            String message = resourceBundle
                    .getString("message.error.invalidEmail");
            message = MessageFormat.format(message,
                    getLabel(context, component));
            facesMessage.setDetail(message);
            facesMessage.setSeverity(FacesMessage.SEVERITY_ERROR);

            throw new ValidatorException(facesMessage);
        }
    }

}

将此添加到您正在验证的字段中。

<f:validator for="#{cc.attrs.id}_text" validatorId="emailValidator"></f:validator>
于 2013-08-22T14:18:11.453 回答