使用Struts 2 xml验证自定义验证程序错误消息

时间:2014-07-14 16:52:25

标签: java web-applications model-view-controller validation struts

我遇到了如何在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>

如何制作,以便错误消息说明哪些确切的电子邮件地址无效?

如何在仍然能够引用消息密钥的同时这样做,那么应用程序可以保持多语言?

1 个答案:

答案 0 :(得分:2)

invalidEmails中使用getter和setter创建字段(例如EmailListValidator),并为其分配无效的电子邮件。在验证xml文件中,您可以使用${...}表示法访问此属性。

<field name="reqEmail">
  <field-validator type="emaillist">
    <message>${getText("validation.reqEmail.valid")}: ${invalidEmails}</message>
  </field-validator>
</field>