`
newslxw
  • 浏览: 208309 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

我的struts2.0开发特点

阅读更多
1、页面获取action的返回值的方式
struts2.0的标签可以直接获取action中的属性,但是一个action中经常有很多操作函数,他们返回的属性可能不一样,导致属性冗余,而且也不是很直观的知道函数中返回那些对象,所以我一直沿用老的返回值方法,就是将返回对象放到request中,或者直接输出json字符串,页面上再使用EL来获取具体的值,可是struts的表情不支持el,所以现在只能使用#request.xxx方法获取返回值。

2、action获取页面传入的参数的方式
   我设计的action一般不存在action的属性变量,因此无法直接从action属性中获取相应的值,我采用BeanUtils类来获取我要的属性。

3、页面校验设计
   我定义了个通过的JS,他会根据各个HTML的控制中自定义的属性来校验数据,这些自定义属性包括:required(必须)、isInt(整数)、isNumeric、isEmpty、maxLen、minLen(最小长度)、equalsLen(长度)


BeanUtils代码:

public class BeanUtilsEx
{
    private static Logger logger = Logger.getLogger(BeanUtilsEx.class);
    private static BeanUtilsBean util = null;  
    static
    {
        DateConverter d = new DateConverter();
        String[] datePattern = { "yyyy-mm-dd", "yyyy/mm/dd", "yyyy.mm.dd","yyyymmdd" };
        d.setPatterns(datePattern);
        ConvertUtils.register(d, java.util.Date.class);

        // 以下几行解决当值为空时,用 null 设置对应字段的值, (但 String 类型仍然非null, 为空字符串)
        ConvertUtils.register(new IntegerConverter(null), Integer.class);
        ConvertUtils.register(new FloatConverter(null), Float.class);
        ConvertUtils.register(new DoubleConverter(null), Double.class);
        // ConvertUtils.register(new DateConverter("yyyy-MM-dd"), Date.class);
        ConvertUtils.register(new DateConverter(null), Date.class);
        ConvertUtils.register(new StringConverter(null), String.class);
        util = new BeanUtilsBean(new ConvertUtilsBean(),new PropertyUtilsBeanEx() );  
    }

    /**
     * 从 request 传递的参数集合,组装到 JavaBean 中
     * 
     * @param request
     * @param obj
     */
    @SuppressWarnings("unchecked")
    public static void populate(HttpServletRequest request, Object obj) {
        Map map = request.getParameterMap();
        try
        {
            util.populate(obj, map);
        }
        catch (IllegalAccessException e)
        {
            e.printStackTrace();
            logger.error(e);
        }
        catch (InvocationTargetException e)
        {
            e.printStackTrace();
            logger.error(e);
        }
    }

}



用例

    /**
     * 从request生成指定的BEAN对象
     * @param object bean对象
     * @return
     */
    public void request2Bean(Object object)
    {
         BeanUtilsEx.populate(this.getRequest(), object);
    }

    @Override
    public String addUser() {
        String ret=UserActionName.USERSEARCH;
        User user = new User();
        user.setEmployer(new Employer());
        request2Bean(user);
        User writer = this.getLoginUser();        
        userServ.addUser(user, writer);
        return ret;
    }    


JS代码

 	var COMJS={
 			validate:function(form)
			{
				var required_objs = $(form).find("*[required='1']");
			    for(var i=0; i<required_objs.length; i++)
			    {
			        var obj = $(required_objs.get(i));
			        var v = $.trim(obj.val());
			        var msg = obj.attr("message");
			        if(v == '')
			        {
			        	var str = "填写";
			        	var tagName = obj.attr("tagName");
			        	var tagType = obj.attr("type");
			        	if(tagName == "SELECT" || tagType == "checkbox" || tagType=="radio")str="选择";
			        	jAlert('info', "["+msg+"]必须"+str+"!", '警告');
			        	return false; 
			        }
			        obj.val(v);
			    }
				var num_objs = $(form).find("*[isnumber='1']");
				for(var i=0; i<num_objs.length; i++)
				{
					 var obj = $(num_objs.get(i));
					 var v = obj.val();
					 var msg = obj.attr("message");
				     if(!/^[\-+]?[\d]*\.?[\d]+$/.test(v))
				     {
				    	 jAlert('info', "["+msg+"]只能是数值", '警告');
				    	 return false;
				     }
				}
				
				var int_objs = $(form).find("*[isint='1']");
				for(var i=0; i<int_objs.length; i++)
				{
					 var obj = $(int_objs.get(i));
					 var v = obj.val();
					 var msg = obj.attr("message");
				     if(!/^\d+$/.test(v))
				     {
				    	 jAlert('info', "["+msg+"]只能是数字组成", '警告');
				    	 return false;
				     }
				}
				
				var min_objs = $(form).find("*[minlength]");
				for(var i=0; i<min_objs.length; i++)
				{
					 var obj = $(min_objs.get(i));
					 var v = $.trim(obj.val());
					 var msg = obj.attr("message");
					 var minlength = obj.attr("minlength");
				     if(v == '' || v.length - minlength < 0)
				     {
				    	 jAlert('info', "["+msg+"]长度不能小于["+minlength+"]", '警告');
				    	 return false;
				     }
				     obj.val(v);
				}
				
				var equal_objs = $(form).find("*[equallength]");
				for(var i=0; i<equal_objs.length; i++)
				{
					 var obj = $(equal_objs.get(i));
					 var v = $.trim(obj.val());
					 var msg = obj.attr("message");
					 var equallength = obj.attr("equallength");
				     if(v == '' || v.length != equallength )
				     {
				    	 jAlert('info', "["+msg+"]长度必须是["+equallength+"]", '警告');
				    	 return false;
				     }
				     obj.val(v);
				}
				
				
				var max_objs = $(form).find("*[maxlength]");
				for(var i=0; i<max_objs.length; i++)
				{
					 var obj = $(max_objs.get(i));
					 var v = $.trim(obj.val());
					 var msg = obj.attr("message");
					 var maxlength = obj.attr("maxlength");
					 obj.val(v);
				     if(v.length - maxlength > 0)
				     {
				    	 jAlert('info', "["+msg+"]长度["+v.length+"]超出最大长度["+maxlength+"]", '警告');
				    	 return false;
				     }
				}
				
				
				var legal_objs = $(form).find("*[legalchar='1']");
				for(var i=0; i<legal_objs.length; i++)
				{
					 var obj = $(legal_objs.get(i));
					 var v = obj.val();
					 var msg = obj.attr("message");
				     if(!COMJS.isLegal(v))
				     {
				    	 jAlert('info', "["+msg+"]只能有数字、英文字母、_、-四种字符组成", '警告');
				    	 return false;
				     }
				}
				
				return true;
			},
			isLegal:function(str)
			{
				return /^[\d\w\-\_]+$/.test(str);
			}
 	}

html示例:
<select message="订货单位" required="1" onchange="orderadd.changeClient(this,this.form)" name="client.id" id="client.id">

<script language="javascript">
COMJS.validate(frm);
</script>

分享到:
评论

相关推荐

    Struts2的特点

    struts2.0的特点 1、form是一个pojo 2、action是一个pojo,所以struts2.0与框架的藕合度非常低。 实现Action时有时会继承于ActionSupport, 覆盖execute方法,从而创建一个Action。 因为ActionSupport提供了...

    Spring 2.0 开发参考手册

    13.1.2. Spring Web MVC框架的特点 13.2. DispatcherServlet 13.3. 控制器 13.3.1. AbstractController 和 WebContentGenerator 13.3.2. 其它的简单控制器 13.3.3. MultiActionController 13.3.4. 命令控制器 ...

    JAVA程序开发大全---上半部分

    12.2.1 下载Struts 2.0开发包 216 12.2.2 创建Struts 2.0项目 216 12.2.3 配置Struts 2.0项目 217 12.2.4 创建Struts 2.0的Action类 218 12.2.5 Struts 2.0中的国际化编程 221 12.2.6 创建基于POJO的Action 223 12.3...

    Java毕业设计-[其他类别]UrlRewriter Java v2.0 RC1_urlrewriterjava.rar

    UrlRewriter Java v2.0 RC1具有以下特点: 1. 灵活的URL重写规则:通过简单的XML配置文件,可以轻松定义各种URL重写规则,满足不同的需求。 2. 支持正则表达式:UrlRewriter Java v2.0 RC1支持正则表达式,可以更...

    J2EE应用开发详解

    246 14.5.2 CORBA和RMI的互操作 247 14.6 小结 248 第15章 Spring框架 249 15.1 Spring 2.0的体系结构 249 15.2 Ioc容器 250 15.2.1 BeanFactory 250 15.2.2 ApplicationContext 252 15.2.3 Beans的生命周期过程 253...

    jeecg-framework-v2.0 (最新源码)

    • 架构技术: Struts2+Spring3+Hibernate4+EasyUI1.3+Spring JDBC+Highcharts报表+Jquery+Ehcache+Freemarker • 代码生成器:自动生成美观大方的前台页面及后台代码 • 查询条件生成器: 动态拼SQL,追加查询条件 •...

    《Java Web应用开发:J2EE和Tomcat》教程第二版

    本书首先介绍Tomcat和J2EE的基本概念,然后由浅人深讲解各种编程技术,包括客户层技术、网络层技术(Servlet/JSP)、Struts架构、服务器层技术(EJB)、数据事务与安全、打包与部署等,使读者能更快、更清晰地了解和...

    ActionScript 3.0 API文档及Flex开发详解电子书

    本书最大的特点是使用大量小巧的示例帮助读者快速体验Flex开发流程。并在最后两大部分中结合完整的项目开发案例,给读者以积少成多、从量变到质变的软件开发学习过程之体验。 本书作者是国内第一个企业级Flex上线...

    《Wicket开发指南一书》PDF版本下载

    象Spring这种大量使用XML方式,我并不欣赏,Spring也意识到了这一点,在2.0版本中努力的简化Xml的配置,但是并不尽如人意)。如果使用简单的规则来配置或者管理一个系统,用户就会很容易的查找到自己需要的内容。而...

    BS架构华软酒店管理系统(连锁版、综合版、标准版)

    《华软酒店管理系统》针对目前酒店宾馆行业管理特点,采用先进的JAVA语言用WEB2.0技术的B/S架构设计开发的系统,基于J2EE架构、以struts+spring+Hibernate开发框架功能强大的酒店系统,整个系统以工作流引擎为基础,...

    Java代码生成工具(傻瓜式操作无需教程的代码生成工具) v2.0.zip

    支持struts1、struts2、springmvc、spring、hibernate3框架。  支持自增主键,复合主键,外键关联。  生成hibernate pojo类,dao类,service类,action类。  生成保存,删除,修改,批量保存,批量修改,批量...

    学生成绩查询系统

    它是功能丰富的JavaEE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML, Struts, JSF, CSS, Javascript, SQL, Hibernate。 Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta ...

    轻量级Java_EE企业应用实战_(第三版).part2.rar

    轻量级Java_EE企业应用实战_(第三... 国内知名的高端IT技术作家,已出版《Spring 2.0宝典》、《基于J2EE的Ajax宝典》、《轻量级J2EE企业应用实战》、《Struts 2权威指南》、《Ruby On Rails敏捷开发最佳实践》等著作。

    轻量级Java_EE企业应用实战_(第三版).part1.rar

    轻量级Java_EE企业应用实战_(第三... 国内知名的高端IT技术作家,已出版《Spring 2.0宝典》、《基于J2EE的Ajax宝典》、《轻量级J2EE企业应用实战》、《Struts 2权威指南》、《Ruby On Rails敏捷开发最佳实践》等著作。

    轻量级Java_EE企业应用实战_(第三版).part3.rar

    轻量级Java_EE企业应用实战_(第三... 国内知名的高端IT技术作家,已出版《Spring 2.0宝典》、《基于J2EE的Ajax宝典》、《轻量级J2EE企业应用实战》、《Struts 2权威指南》、《Ruby On Rails敏捷开发最佳实践》等著作。

    JAVA\轻量级Java_EE企业应用实战_(第三版).part4.rar

    轻量级Java_EE企业应用实战_(第三... 国内知名的高端IT技术作家,已出版《Spring 2.0宝典》、《基于J2EE的Ajax宝典》、《轻量级J2EE企业应用实战》、《Struts 2权威指南》、《Ruby On Rails敏捷开发最佳实践》等著作。

    基于J2EE框架的个人博客系统项目毕业设计论...

    此外,还要考虑开发人员的水平,学习了两年的jsp开发,对于这个系统的编写,我想完整的之需要两个月就可以写出程序,再花上几天的调试,计划两个月左右就可以完成投入使用了。 我们掌握了数据库及其应用技术、...

    整理后java开发全套达内学习笔记(含练习)

    abstract (关键字) 抽象 ['æbstrækt] access vt.访问,存取 ['ækses]'(n.入口,使用权) algorithm n....Annotation [java] 代码注释 [ænәu'teiʃәn] anonymous adj.匿名的[ә'nɒnimәs]'(反义:directly adv....

    “桂林高新杯”软件设计大赛.doc

    " " "2、JSP、JavaBean、Servlet、JDBC、Struts、Hibernate、Spring" " "、EJB、 Web Service、JMS、JTA、JTS技术开发; " " "3、系统集成、优化。 " "数据库应用 "考核要点 "分值 "20 " "数据库应用 "1、数据库...

Global site tag (gtag.js) - Google Analytics