转载自:http://blog.csdn.net/q547550831/article/details/53323206#comments
Struts2提供了一些基于拦截器的数据封装方式,一共有四种,分为静态参数封装和动态属性封装,动态属性封装又可分为属性驱动和模型驱动,属性驱动又可分为基本属性驱动和对象图导航语言(OGNL,Object Graph Navigation Language)驱动。
思维导图
在Action文件中
静态参数封装
在struts.xml文件中配置
在Action文件中
PS:注意封装参数都是按照get/set方法的名字,按名匹配的,不是按字段的名字进行匹配。
其底层是通过一个名叫staticParams的拦截器进行拦截的。
默认拦截器有如下这么多个,可以在Struts2核心包下的struts-default.xml文件中找到
动态参数封装
属性驱动封装
基本属性驱动
基本属性封装是通过请求参数的名称,按照get/set方法的方式进行封装的。
JSP页面
在struts.xml文件中配置
在Action文件中
PS:这种方式正如你所见,每个参数都要有get/set方法,如果请求参数过多的话,那么将使Action类变得非常臃肿,所以一般不建议使用。
对象导航图语言(OGNL)简单使用
对象导航图语言和hibernate的对象导航查询很相似,都是基于对象加点号操作符的形式,来访问对象字段和其他关联对象。如果不熟悉hibernate,那么想想对象中的方法是怎样调用的,就能明白。
封装对象
JSP页面
在struts.xml文件中配置
在Action文件中
PS:对象字段可以不需要new,创建出来,在拦截器中会判断一次,然后会进行处理,具体如下:
用户实体类
封装List集合
JSP页面
在struts.xml文件中配置
在Action文件中
封装Map集合
JSP页面
在struts.xml文件中配置
在Action文件中
模型驱动封装
模型驱动(ModelDriven),是通过ModelDriven接口来接收请求参数,Action类必须要实现ModelDriven接口(可以使用泛型),并且要重写getModel()方法,这个方法返回的就是Action所使用的数据模型对象。
模型驱动方式通过JavaBean模型进行数据传递。只要是普通的JavaBean,就可以充当模型部分。采用这种方式,JavaBean所封装的属性与表单的属性一一对应,JavaBean将成为数据传递的载体。
其是通过ModelDrivenInterceptor拦截器,进行封装的
JSP页面
在struts.xml文件中配置
在Action文件中
PS:在实际开发中,大部分情况下会使用模型驱动的方式进行封装,但是如果我们需要将请求参数封装成多个对象,那么就需要使用OGNL的方式了。
封装参数失败后的处理方式
struts2框架默认转换的数据类型
基本数据类型自动转换。
日期类型按照本地格式转换。本地格式:yyyy-MM-dd 西方国家:MM/dd/yyyy
字符串数组会按照(字符+逗号+空格的方式)拼接成字符串。
关于没有input结果视图的解决
在对应的动作类配置中配置一个<result name="input">的结果视图
input结果视图的含义:在struts2中就是用于数据回显的。
input结果视图配置的地址:从哪来回哪去
错误信息提示
需要借助struts2的标签库。
<s:fielderror fieldName=""/>指定哪个字段有错误提示
<s:actionerror/>指定动作方法执行的错误提示
struts2中的国际化
国际化:I18N internationalization
关于错误信息中文提示的解决
a、在实体类所在的包下创建一个名称为实体类名称.properties的文件
例如:User.java User.properties
b、提示内容是根据页面上的错误信息改造的key
英文错误提示:Invalid field value for field "birthday
key:invalid.fieldvalue.birthday