一、封装请求正文到对象(非常重要)

 

1 、静态参数封装

在struts.xml配置文件中,给动作类注入值。调用的是setter方法

Struts2学习(二)

原因:是由一个staticParams的拦截器完成注入的

Struts2学习(二)

Struts2学习(二)

http://localhost:8080/strutsParams/action1.action

2、动态参数封装:开发时用到的

通过用户的表单封装请求正文参数

 

2.1 、动作类作为实体模型

数据模型和动作类写在一起

实体模型:Entity,对应数据库中表的记录(注意类对应的是表结构,而对象对应的是一条记录)

表单中的name属性取值必须和动作类中的数据模型的set方法后的名称一致  <input type="text" name="username"/>对应动作类中的setUsername方法

原因:是由params拦截器(ParametersInterceptor)完成的

Struts2学习(二)

 

2.2 、动作类和实体模型分开

数据模型和动作类分开写

Struts2学习(二)

会出现空指针异常

问题:由于我们没有初始化user对象,默认为null,一调用setUser方法,就空指针异常了。但是框架却封装进去值了。

原因:通过执行过程:

getUser --> setUser --> getUser

第一次执行getter方法看对象是否存在,如果不存在就是用反射创建一个对象

第二次执行setter方法 不存在对象就创建一个对象,把它set回去

第三次执行getter方法得到对象,调用对应的set属性方法为属性赋值

Struts2学习(二)

Struts2学习(二)

 2.3、模型驱动(开发中采用的方式)

建立动作类和数据模型分开的前提下

原因:是由一个modelDrivenIntercepter拦截器做的

步骤:

1、实现modelDriven的接口

2、实现接口中的抽象方法getModel

3、在使用模型驱动的时候,数据模型必须由我们自己来实例化

 private User user = new User();

 表单中name属性的取值已经不是一个字符串了

Struts2学习(二)

二、数据类型的转换(实际开发中几乎不用)

1、开发中的情况:

实际开发中用户通过浏览器输入的数据都是String或者String[]。

String/String[]————填充模型(set方法)————>POJO(plain old java object) pojo中有java的数据类型。

POJO————————获取(get方法)————>页面展示:String

 

2、类型转换情况

写数据:(增,删,改)都是String或String[]数组转换为其他类型。

读数据:(查)其他类型转换为String。

 

3、Struts2提供的常用类型转换

a.基本数据类型自动转换。

b.日期类型:默认按照本地日期格式转换(yyyy-MM-dd)。

c.字符串数组:默认用逗号+空格,连接成一个字符串。

 

4、自定义类型转换器(知道)

示例:把日期格式按照 MM/dd/yyyy的格式转换

4.1、Struts2中的类型转换器结构:

Struts2学习(二)

Struts2学习(二)

Struts2学习(二)

Struts2学习(二)

4.2、编写类型转换器(编写一个类继承StrutsTypeConverter,实现抽象方法)

第一步:编写一个类,继承自StrutsTypeConverter,实现抽象方法convertFromString,convertToString的抽象方法

Struts2学习(二)

4.3、注册类型转换器

局部类型转换器:只能指定javabean中的属性用

按照属性来注册。在属性所属的javabean的包下建立一个.properties文件。文件名称:javabean名称-conversion.properties

Struts2学习(二)

Struts2学习(二)

 

全局类型转换器:(推荐)

按照要转换的数据类型来注册

在顶层路径建立一个固定名称xwork-conversion.properties的属性文件

Struts2学习(二)

Struts2学习(二)

 

5、转换失败后的处理(重要)

问题一:当转换失败后,页面出错,提示:

Struts2学习(二)

解决办法:配置回显结果视图

 Struts2学习(二)

问题二:配置了回显视图后,当转换失败时,可以回到请求页面,但是表单数据都没了

显示错误提示:借助Struts2的标签库

Struts2学习(二)

回显数据:使用struts2的标签库生成表单(建议使用)

 

Struts2学习(二)

 1 <%@ taglib uri="/struts-tags" prefix="s" %>  <%-- 导入标签库--%>
 2 <s:fielderror /> <%-- 字段错误提示--%>
 3 <s:actionerror /> <%-- 动作错误提示--%>
 4 <%-- struts2的form表单标签提供了和原始HTML标签几乎一致的属性
 5 action:请求地址,直接动作名称,不用前面加上contextPath属性
 6 method:请求方式,struts的表单项默认post
 7 enctype:表单编码的MIME(多用途互联网扩展类型)
 8 --%>
 9 <s:form>
10 </s:form>

Struts2学习(二)

Struts2学习(二)

问题三:错误信息中文提示,使用的是struts2的国际化

Struts2学习(二)

类型转换器当转换失败后,进入input视图是由conversionError的拦截器完成

要想使用类型转换中的错误处理,在定义Action时必须继承ActionSupport实现类

转自:https://www.cnblogs.com/1989guojie/p/6227479.html

相关文章: