package actions; import com.opensymphony.xwork2.ActionSupport; import common.validation.FormValidator; public class HelloWorldAction extends ActionSupport { /** * */ private static final long serialVersionUID = -8091731438081617401L; // 或者implements Action { @FormValidator(input = "form", value = "user.name,用户名,required min-length-5 max-length-10 validate-alpha;" + "age,年龄,validate-digits min-value-18 max-value-100;" + "password,密码,required;" + "password2,重复密码,required equals-password-原始密码;" + "email,,validate-email;" + "gender,性别,validate-one-required;" + "ip,,validate-ip;" + "date,生日,validate-date;" + "num1,数字1,validate-number;" + "num2,数字2,validate-number less-than-num1-数字1;" + "float,数字范围,float-range-1-10;" + "address,地址,validate-chinese;" + "zip,邮编,validate-zip;" + "id_num,身份证,validate-id") public String form() throws Exception { return SUCCESS; } @FormValidator(input = "form_js", value = "user.name,用户名,required min-length-5 max-length-10 validate-alpha;" + "age,年龄,validate-digits min-value-18 max-value-100;" + "password,密码,required;" + "password2,重复密码,required equals-password-原始密码;" + "email,,validate-email;" + "gender,性别,validate-one-required;" + "ip,,validate-ip;" + "date,生日,validate-date;" + "num1,数字1,validate-number;" + "num2,数字2,validate-number less-than-num1-数字1;" + "float,数字范围,float-range-1-10;" + "address,地址,validate-chinese;" + "zip,邮编,validate-zip;" + "id_num,身份证,validate-id") public String form_js() throws Exception { return SUCCESS; } @FormValidator(input = "form_tag", value = "user.name,用户名,required min-length-5 max-length-10 validate-alpha;" + "age,年龄,validate-digits min-value-18 max-value-100;") public String form_tag() throws Exception { return SUCCESS; } @FormValidator(input = "none", value = "user.name,用户名,required min-length-5 max-length-10 validate-alpha;" + "age,年龄,validate-digits min-value-18 max-value-100;" + "password,密码,required;" + "password2,重复密码,required equals-password-原始密码;" + "email,,validate-email;" + "gender,性别,validate-one-required;" + "ip,,validate-ip;" + "date,生日,validate-date;" + "num1,数字1,validate-number;" + "num2,数字2,validate-number less-than-num1-数字1;" + "float,数字范围,float-range-1-10;" + "address,地址,validate-chinese;" + "zip,邮编,validate-zip;" + "id_num,身份证,validate-id") public String form_json() throws Exception { //测试json格式输出 return SUCCESS; } }
<span class="errorMessage">${validationErrors}</span> <span class="errorMessage">${errors['user.name'][0]}</span> <br>
{ "user.name":["用户名的长度不能小于5, 当前长度为1","用户名只能输入英文字母"], "password":["密码不能为空"], "password2":["重复密码不能为空"], "gender":["性别必须至少选中一项"] }
@SuppressWarnings("serial") public class JsonOutputInterceptor extends AbstractValidationInterceptor{ //重写父类的错误输出方法 @Override public String errorOutput(String input) { // json 格式输出 Map<String, List<String>> errors = getFieldErrors(); // 使用fastjson String text = JSON.toJSONString(errors); writeAjaxResult(text); return input; } protected void writeAjaxResult(String s) { try { HttpServletResponse response = ServletActionContext.getResponse(); response.getOutputStream().write(s.getBytes("utf-8")); } catch (Exception e) { } } }
<!-- 返回json验证错误结果 --> <package name="quickValidation_json" extends="struts-default"> <interceptors> <interceptor name="quickValidationJsonInterceptor" class="actions.JsonOutputInterceptor" /> <interceptor-stack name="quickValidationStack_json"> <interceptor-ref name="defaultStack" /> <interceptor-ref name="quickValidationJsonInterceptor" /> </interceptor-stack> </interceptors> <default-interceptor-ref name="quickValidationStack_json" /> </package> <package name="test_json" namespace="" extends="quickValidation_json"> <action name="form_json" class="actions.HelloWorldAction" method="form_json" /> </package>