Struts 2.x 高级应用
来源:互联网 发布:和俄罗斯人谈恋爱 知乎 编辑:程序博客网 时间:2024/06/09 17:32
一、数据类型转化器
JSP提交的数据全部是String类型的。Struts2也是通过request.getParameter(name)获取到String类型数据,并通过拦截器将String转换各种常用的数据类型,如Date、Time、Timestamp等,然后通过getter、setter方法设置到Action对应的属性上。
1、日期转换器
数据类型转换器都需要实现ognl.TypeConverter接口。一般地,直接继承DefaultTypeConverter类,并实现convertValue()方法就可以了。
convertValue()方法有3个参数,参数value为待转换的数据,参数toType为要转成的类型。
注意JSP提交数据时,参数value为request.getParameterValues(String name)返回的String[]类型对象,而不是String。
2、 配置转换器
xwork-conversion-properties
java.sql.Date = com.helloweenvsfei.struts2.convertor.DateTimeConvertor
java.sql.Time = com.helloweenvsfei.struts2.convertor.DateTimeConvertor
java.util.Date = com.helloweenvsfei.struts2.convertor.DateTimeConvertor
3、Action代码
转换器的调用对Action是透明的,Action中不需要做什么处理,只需要声明Date类型的变量就可以了。Struts2自动调用转换器将从request中取到的String转换成Date,然后setter到Action实例中。在输出Action的Date类型属性时,Struts2标签会再次调用转换器的convertValue()方法,将Date类型转换成String类型。
4、为Action配置转换器
转换器还可以配置在struts.xml的Action中。这时候,转换器将只作用于当前的Action,而不是所有的Action。
converter = “com.helloweenvsfei.struts2.convertor.DateTimeConvertor”
二、获取request、response
1、利用ServletActionContext的静态方法
非注射方式(非IoC方式)
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
HttpSession session = request.getSession(trut);
ServletContext application = ServletActionContext.getServletContext();
2、利用相关的Aware接口
注射方式(IoC方式)
ServletContextAware、ServletRequestAware、SerlvetResponseAware、SessionAware。
Struts在实例化一个Action实例时,如果发现它实现了相应的Aware接口,会把相关的资源通过Aware接口方法注射进去。(IoC方式)
Aware接口其实是一种拦截器,拦截器代码会在执行Action之前执行,将相关的Servlet对象设置进来。
三、使用Validator校验数据
Struts2提供的数据校验是配置式的,既可以用XML配置,也可以用Java注解(@Anonotation)配置。
1、使用XML配置的数据校验Validator
使用XML配置时,需要在Action类所在的package内添加一个XML文件,文件名格式为Action类名-validation.xml或者Action类名-Action别名-validation.xml。如果Action中有多个方法,一般使用后者。
支持校验的Action必须实现Validateable接口,一般继承ActionSupport就可以了。
<validators>
<field name=”book.name”>
<field-validator type=”requiredstring”>
<param name=”trim”>true</param>
<message>请输入书籍名称</message>
</field-validator>
</field>
<field name=”book.publishedDate”>
<field-validator type=”date”>
<param name=”min”>1900-01-01</param>
<param name=”min”>2200-01-01</param>
<message>
<![CDATA[日期格式必须位于1900-01-01与2200-01-01之间]]>
</message>
</field-validator>
</field>
</validators>
2、配置客户端Validator
Struts2也支持客户端JavaScript校验,再将JSP的<struts:form>标签添加validate=”true”属性即可。
3、常用的Validator
required 检查被校验域是否为null。
requiredstring 检查被校验String是否为null或空,可选参数trim,在验证前对字符串执行trim操作。
stringlength 检查被校验String的长度范围,可选参数trim、minLength、maxLength。
int/double 检查输入是否为int/double,并且可判断数值范围,可选参数为min、max、minInclusive、maxInclusive、minExclusive、maxExclusive。
date 检查date的范围,可选参数为min、max。
email 检查输入是否为E-mail格式。
url 检查输入是否为url格式。
conversion 检查是否将出现数据转换错误。
expression/fieldexpression 检查某个布尔表达式的值是否为true,后者绑定到某个字段上,参数为expression。
visitor 使用预定义的validators进行校验,参数为context。
regex 检查是否能匹配到正则表达式,参数为regex。
4、使用@Java注解配置Validator
@Validation
public class BookAction extends ActionSupport {
@Validations (
requiredStrings = {
@RequiredStringValidator(
type = ValidatorType.SIMPLE,
trim = true,
fieldName = “book.name”,
message = “请输入书籍名称.*”
),
@RequiredStringValidator(…)
},
dateRangeFields = {
@DateRangeFieldValidator(
type = ValidatorType.SIMPLE,
fieldName = “book.publishedDate”,
min = “1900-01-01”,
max = “2200-01-01”,
message = “日期必须大于${min}小于${mxa},当前值为${book.publishedDate}.”
)
}
)
public String add(){…}
@SkipVlidation
public String list() {…}
}
- Struts 2.x 高级应用
- Struts 1高级应用
- 17_Struts 2.x 高级应用
- Javascript高级应用---牛X
- 15_Struts1.x高级应用
- Struts 1.x Vs Struts 2.x
- Struts 1.x 对比 Struts 2.x
- struts 1.x 2.x
- struts 2.x
- Struts 2.x初阶
- Struts 2.x
- Struts 2.x 概述
- Struts 2.x
- struts 2.x
- Hibernate3.x过滤器的高级应用
- Hibernate 3.x过滤器的高级应用
- Hibernate3.x过滤器中的高级应用
- Hibernate3.x过滤器的高级应用
- Android代码中实现WAP方式联网
- 圈内业务描述
- JAVA 网络编程(TCP 上传图片)
- java语法总结02--数组
- using namespace
- Struts 2.x 高级应用
- mysql开机启动设置
- Solr 优化主关键字索引
- java语法总结03--方法
- 缓存图片 — 或者不缓存 imageWithContentsOfFile imageNamed
- 解决VS编译错误:Failure during conversion to COFF: file invalid or corrupt
- Java语法总结04--内部类
- poj 1953 World Cup Noise
- java零碎要点---Tesseract 3.0,Java OCR 图像智能字符识别技术,可识别中文