我正在尝试使用ConstraintViolationException,我创建了一个简单的约束电子邮件并为其实现了验证器:
EmailValidator implements ConstraintValidator<Email, String> { }
我的问题是当我从entityManager调用persist时,它不会捕获异常。我查看了ConstraintViolationException并发现祖先类是RuntimeException所以它没有被检查但是我很困惑,因为我看到很多文章都捕获了相同的异常。
任何人都有任何评论和解决方法吗?
答案 0 :(得分:0)
此链接解决了我的问题:Catch PersistenceException or ConstraintViolationException in JBoss AS 7
然后作为一种解决方法,我创建了一个电子邮件验证程序,并在我正在验证的字段中添加了一个f:验证器。
@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>