[coolxing按: 转载请注明作者和出处, 如有谬误, 欢迎在评论中指正.]
html页面中每一个表单输入项都只能是字符串或者字符串数组, 服务端可能需要把String转换为特定的数据类型.
在struts2中, 由parameters拦截器负责请求参数的类型转换, 该拦截器是default-stack中的一员. parameters拦截器可以自动完成字符串到基本数据类型的转换.
在Action类中定义与请求参数同名的属性, 并为这些属性提供getter, setter方法, struts2便能自动接收请求参数, 然后调用setter方法赋值给相应的属性.
从字符串到基本数据类型的转换.
1. jsp代码:
<form action="${pageContext.request.contextPath}/converter/userAction_save.action" name="form1" method="post">
编号:<input type="text" name="id"><br>
姓名:<input type="text" name="userName"><br>
<input type="submit" value="提交"><br>
</form>
2. Action类:
public class UserAction extends ActionSupport {
private Integer id;
private String userName;
public String save(){
System.out.println("id = " + id + ", username = " + userName);
return "success";
}
//省略getter和setter方法...
}
从字符串到自定义javaBean的转换.
1. jsp代码:
<form action="${pageContext.request.contextPath}/converter/personAction_save.action" name="form1" method="post">
姓名:<input type="text" name="person.name"><br>
年龄:<input type="text" name="person.age"><br>
<input type="submit" value="提交"><br>
</form>
2. Action类:
public class PersonAction extends ActionSupport {
private Person person;
public String save() {
System.out.println("name = " + person.getName() + ", age = " + person.getAge());
return "success";
}
//省略getter和setter方法...
}
从字符串到Collection集合的转换.
1. jsp代码:
<form action="${pageContext.request.contextPath}/converter/personsAction_save.action" name="form1" method="post">
姓名:<input type="text" name="persons[0].name"><br>
年龄:<input type="text" name="persons[0].age"><br>
姓名:<input type="text" name="persons[1].name"><br>
年龄:<input type="text" name="persons[1].age"><br>
<input type="submit" value="提交"><br>
</form>
2. Action类:
public class PersonsAction extends ActionSupport {
private Collection<Person> persons;
public String save() {
for (Person p : persons) {
System.out.println("name = " + p.getName() + ", age = "
+ p.getAge());
}
return "success";
}
//省略getter和setter方法...
}
自定义转换器. 当struts2提供的转换器无法满足需求时, 可以自定义一个转换器.
以"yyyy~Mm~dd"类型的字符串到java.util.Date类型的转换为例.
1. jsp表单:
<form action="${pageContext.request.contextPath}/converter/dateAction_save.action" name="form1" method="post">
出生年龄:<input type="text" name="birthday"><br>
<input type="submit" value="提交"><br>
</form>
2. Action类:
public class DateAction extends ActionSupport {
private java.util.Date birthday;
public String save() {
System.out.println(birthday);
return "success";
}
//省略getter和setter方法...
}
3. 自定义转换器:
public class DateConverter extends DefaultTypeConverter {
/**
* @param context: Ognl上下文
* @param value: 要转化的字符串数组, 调用request.getParameterVaues("birthday")获得
* @param toType: 目的数据类型, 此时为java.util.Date.class
* @return: 方法的返回值将用于设置Action中的birthday属性
*/
@SuppressWarnings("unchecked")
public Object convertValue(Map<String, Object> context, Object value,
Class toType) {
if (value instanceof String[] && toType == java.util.Date.class) {
try {
String[] str = (String[]) value;
SimpleDateFormat sf = new SimpleDateFormat("yyyy~MM~dd");
if (str[0] != null & str[0].matches("[0-9]{4}~[0-9]{2}~[0-9]{2}")) {
return sf.parse(str[0]);
}
} catch (ParseException e) {
e.printStackTrace();
/*
* 在struts2中,处理类型转化错误的工作是由StrutsConversionErrorInterceptor拦截器完成.
* 如果类型转换过程中出现异常, 一定要再捕获后重新抛出.
* 如果错误的类型拦截器接收到异常,认为类型转化过程中出现了错误,转到input属性所指向的错误页面 .
* 如果错误的类型拦截器没有接收到异常,认为类型转化过程成功,这时转到成功页面.
*/
throw new RuntimeException(e);
}
}
return null;
}
}
4. 注册自定义的转换器: 在与当前action同级的目录创建ActionClassName-conversion.properties文件, 并在其中输入"action中的属性名称=类型转化器的全限定类名". 此时应该在DateAction类的同级目录下创建DateAction-conversion.properties文件, 输入的内容为:
birthday=cn.xing.converter.DateConverter
采用上述方式配置的转换器是局部转换器, 只对特定的Action有效. 如果想要注册全局转换器, 可以在src目录下新建xwork-conversion.properties文件, 输入的内容同上.
分享到:
相关推荐
struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换
适合struts2入门使用,主要是struts拦截到的数据类型转换的问题
struts2.1数据类型转换2struts2.1数据类型转换2struts2.1数据类型转换2struts2.1数据类型转换2struts2.1数据类型转换2struts2.1数据类型转换2struts2.1数据类型转换2struts2.1数据类型转换2
struts2数据类型转换
struts2 类型转换 数据校验
NULL 博文链接:https://hanazawakana.iteye.com/blog/1681564
自己用struts2写的一个简单的局部数据类型转换实例,适合初学者
SSH之Struts2数据类型转换国际化及文件上传下载
struts2 将要进行自定义类型转换的点数据从1个增加到3个 struts3 进行全局的类型转换 struts4 使用Struts2中内部类中的方法进行自定义类型转换,用到的类StrutsTypeConverter struts5 增加集合类型,使用范型 ...
使用struts2进行数据类型转换(附图)非常详细
使用struts2提供的转化器,实现Date类型的数据转换
自己初学struts2做的类型转换方式,有局部类型转换,全局类型转换,和大量数据类型转换,供初学者学习,共同讨论
对于基本数据类型 strus2可以自动的将其转换成所需要的类型,但是我们自己定义的引用数据类型无法转换,本文详细介绍了strus2的自定义类型转换器
01 Struts2-Action 5 一、 Struts作用: 5 二、 搭建Struts2的运行环境: 5 三、 Namespace 6 四、 标签 6 五、 Action 6 六、 路径问题的说明 8 七、 Action的动态调用方法 8 ...10 类型转换 38 Struts2总结 39
基于struts2的类型转换,对于熟悉struts2的流程也许会有些帮助
01 Struts2-Action 5 一、 Struts作用: 5 二、 搭建Struts2的运行环境: 5 三、 Namespace 6 四、 标签 6 五、 Action 6 六、 路径问题的说明 8 七、 Action的动态调用方法 8 ...10 类型转换 38 Struts2总结 39
新手必备,看完绝对思路清晰。醍醐灌顶啊! 一. Struts2介绍 1.... 数据类型转换器 11. 实现文件上传 12. Struts2的拦截器 13. 拒绝表单重复提交 四. OGNL表达式 五. Struts2中常用标签
软件硕士张龙老师,对Struts2类型转换器的说明源代码,以及批量插入数据的源代码,不改动任何代码的情况下进行类型转换。
《Struts 2完全学习手册》全面讲述Struts 2开发框架的知识,包括Struts 2中配置文件的详细讲解、国际化与异常处理、数据类型的转换、数据的输入校验、Struts 2强大的标签库、Struts 2中文件的上传与下载、Struts 2对...
1、struts2概述 Struts2 软件下载 Struts2 比较重要的类 操作步骤及框架配置 struts运行机制 2、简单的struts2程序 ...9 struts2类型转换 ........ 10struts2标签库 ........ 11、访问数据库 ........