我遇到了如何在struts 2中创建自定义错误消息的问题。
我遍历电子邮件地址列表并使用自定义验证器进行验证。如果列表中的任何电子邮件地址无效,则该验证器将返回true。
这是我的自定义验证器:
public class EmailListValidator extends FieldValidatorSupport {
@Override
public void validate(Object obj) throws ValidationException {
String fieldName = getFieldName();
String fieldValue = (String) getFieldValue(fieldName, obj);
if (fieldValue == null) return;
fieldValue = fieldValue.trim();
//
if (errorCheck(fieldValue).length() > 1) {
addFieldError(fieldName, obj);
}
}
private String errorCheck(String permList) {
if (permList.equals("")) {
return "";
}
String emailList = permList.toLowerCase();
String []emails = emailList.split(";");
emailList = "";
for (int i=0; i<emails.length; i++) {
if (emails[i].matches(EMAIL_PATTERN_STRING)) {
//Do Nothing (Email is valid - or at least appears as such)
} else {
emailList += emails[i] + "; ";
}
}
return emailList;
}
}
如上所述,在这种情况下,要么是错误要么是没有错误;如果有错误,则显示非常一般的错误消息。
<field name="reqEmail">
<field-validator type="emaillist">
<message key="validation.reqEmail.valid" />
</field-validator>
</field>
如何制作,以便错误消息说明哪些确切的电子邮件地址无效?
如何在仍然能够引用消息密钥的同时这样做,那么应用程序可以保持多语言?
答案 0 :(得分:2)
在invalidEmails
中使用getter和setter创建字段(例如EmailListValidator
),并为其分配无效的电子邮件。在验证xml文件中,您可以使用${...}
表示法访问此属性。
<field name="reqEmail">
<field-validator type="emaillist">
<message>${getText("validation.reqEmail.valid")}: ${invalidEmails}</message>
</field-validator>
</field>