`
wenjinglian
  • 浏览: 806811 次
  • 性别: Icon_minigender_1
  • 来自: 株洲->深圳
社区版块
存档分类
最新评论

Struts2极速表单验证框架(注解)

阅读更多

 

项目介绍

Struts 2 极速表单验证框架

 

  • 最快速的后台表单验证框架
  • 简洁,快速的验证语法
  • 无需编写验证提示信息
  • 错误消息在指定地方显示
  • 支持组合验证
  • 易于扩展
  • 基于标准的Java Annotaction添加验证,易于和现有项目的无缝集成
  • 特殊应用场景支持,如:密码确认,结束日期必须大于开始日期
  • 支持前后台一致的验证规则

作者:刘长炯 beansoft http://www.beansoft.biz/ 


为什么使用此框架

一直都在寻找一个简单、好用的Struts2后台验证框,这次终于找到了. struts2-quickvalidation-plugin

我觉得比起之前的:http://nassir.iteye.com/admin/blogs/1474026 介绍的都好用。

如何使用请下载原作者详细说明文档:Struts2QuickValidation.pdf

示例代码

action演示代码:
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;
    }

}
 

对代码的修改

我对代码进行了如下改动:
1. 将原struts2-quickvalidation-plugin工程改成了maven项目
2. 验证器在容器初始化全部加载
3. 自定义实现错误结果输出 
 原来通过跳转页面,显示错误信信息:
<span class="errorMessage">${validationErrors}</span>

<span class="errorMessage">${errors['user.name'][0]}</span> <br>

现在可以自己实现返回json格式错误信息:
{
"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) {
        }
    }
}
 
struts.xml配置:
<!-- 返回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>
 

框架代码:struts2-quickvalidation


相关演示效果图:
http://localhost/struts2-quickvalidation-demo1.1

跳转页面验证效果:


 
json格式输出效果:

 

 此框架功能还不是挺全面,还需不断完善,作者的这种验证思路可以运用到其它框架当中. springMvc通过aop加入此验证也是相当不错的。

如果有疑问可以给我留言.



 

 

  • 大小: 3.5 KB
  • 大小: 15.6 KB
  • 大小: 15.5 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics