converter.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Struts2中的转换器</title>
</head>
<body>
<h3>Struts2中的转换器</h3><hr/>
<form action="info.action" method="post">
<table>
<tr>
<td>登录名</td>
<td><input type="text" name="user.loginname"/></td>
</tr>
<tr>
<td>生日</td>
<td><input type="text" name="user.birthday"/></td>
</tr>
<tr>
<td>性别</td>
<!--OGNL表达式:user属性的gender属性[由于是日期类型,程序中自定义有日期转换器]写法 -->
<td><input type="radio" name="user.gender" value="M" checked="checked"/>男<input type="radio" name="user.gender" value="F"/>女</td>
</tr>
<tr>
<td>考试成绩</td>
<td><input type="text" name="user.score"/></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value=" 提交 "/></td>
</tr>
</table>
<!--OGNL表达式:元素类型为String类型的List的写法 -->
<input type="hidden" name="list[0]" value="张三"/>
<input type="hidden" name="list[1]" value="李四"/>
<input type="hidden" name="list[2]" value="王五"/>
<!--OGNL表达式:元素类型为user类型的LIST属性的写法 -->
<input type="hidden" name="userList[0].loginname" value="张三"/>
<input type="hidden" name="userList[1].loginname" value="李"/>
<input type="hidden" name="userList[2].loginname" value="王"/>
<!--OGNL表达式:元素类型为user类型的set属性的写法 -->
<input type="hidden" name="userSet.makeNew[0].loginname" value="xxx"/>
<input type="hidden" name="userSet.makeNew[1].loginname" value="yyy"/>
<input type="hidden" name="userSet.makeNew[2].loginname" value="ggg"/>
<!--OGNL表达式:map属性的写法 -->
<input type="hidden" name="map['jolin']" value="caiyilin"/>
<input type="hidden" name="map['jay']" value="zhoujielun"/>
<!--OGNL表达式:Tel属性的写法 -->
<input type="hidden" name="tel" value="010-66298878"/>
</form>
</body>
</html>
info.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>显示提交的数据</title>
</head>
<body>
<h3>显示提交的数据</h3><hr/>
<table>
<tr>
<td>登录名</td>
<td><s:property value="user.loginname"/> </td>
</tr>
<tr>
<td>生日</td>
<td><s:date name="user.birthday" format="yyyy-MM-dd HH:mm:ss"/></td>
</tr>
<tr>
<td>性别</td>
<td><s:property value="user.gender"/> </td>
</tr>
<tr>
<td>考试成绩</td>
<td><s:property value="user.score"/></td>
</tr>
<tr>
<td>电话号</td>
<td><s:property value="tel"/></td>
</tr>
<tr>
<td colspan="2"><input type="button" value=" 返回 " οnclick="history.go(-1);" /></td>
</tr>
</table>
<hr/><s:debug/>
</body>
</html>
error.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>出现内部错误</title>
</head>
<body>
<h3>出现内部错误</h3><hr/>
<s:actionerror/>
</body>
</html>
总结
Struts2中的类型转换器
1) Struts2中内置了一些常用的类型转换器:可以把客户端提交的String数据转换成对应类型的数据。
a) 基本类型
b) java.util.Date:
c) 数组和列表
2) 自定义类型转换器:
a) 继承自org.apache.struts2.util.StrutsTypeConverter类
public abstract Object convertFromString(Map context, String[] values, Class toClass);
context:OGNL上下文的Map对象
values :需要转换的字符串数组
toClass:要转换的目标类型
public abstract String convertToString(Map context, Object o);
context:OGNL上下文的Map对象
o:需要转换的对象
b) 注册:以全局方式
在应用程序的classpath下创建一属性文件,名为:xwork-conversion.properties
文件内容:待转换类型的全限定名=类型转换器类的全限定名
3) 转换Set:
0) Action中的Set属性需要进行初始化:如:
private Set<User> userSet = new HashSet<User>();
a) 添加针对某个Action的转换器配置文件:ActionName-conversion.properties 如:
UserAction-conversion.properties
b) 在这个文件中添加:Action的Set属性的相关配置
Element_属性名=Set中的元素类型的全限定名 #指定Set中的元素类型
KeyProperty_属性名=Set中的元素类型中的某个属性 #指定Set的索引字段
如下示例:
Element_userSet=com.qiujy.domain.User
KeyProperty_userSet=id
c) JSP页面: <input type="text" name="Set属性名.makeNew[0].属性名"/>
如:<input type="text" name="userSet.makeNew[0].loginname"/>
converter.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Struts2中的转换器</title>
</head>
<body>
<h3>Struts2中的转换器</h3><hr/>
<form action="info.action" method="post">
<table>
<tr>
<td>登录名</td>
<td><input type="text" name="user.loginname"/></td>
</tr>
<tr>
<td>生日</td>
<td><input type="text" name="user.birthday"/></td>
</tr>
<tr>
<td>性别</td>
<!--OGNL表达式:user属性的gender属性[由于是日期类型,程序中自定义有日期转换器]写法 -->
<td><input type="radio" name="user.gender" value="M" checked="checked"/>男<input type="radio" name="user.gender" value="F"/>女</td>
</tr>
<tr>
<td>考试成绩</td>
<td><input type="text" name="user.score"/></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value=" 提交 "/></td>
</tr>
</table>
<!--OGNL表达式:元素类型为String类型的List的写法 -->
<input type="hidden" name="list[0]" value="张三"/>
<input type="hidden" name="list[1]" value="李四"/>
<input type="hidden" name="list[2]" value="王五"/>
<!--OGNL表达式:元素类型为user类型的LIST属性的写法 -->
<input type="hidden" name="userList[0].loginname" value="张三"/>
<input type="hidden" name="userList[1].loginname" value="李"/>
<input type="hidden" name="userList[2].loginname" value="王"/>
<!--OGNL表达式:元素类型为user类型的set属性的写法 -->
<input type="hidden" name="userSet.makeNew[0].loginname" value="xxx"/>
<input type="hidden" name="userSet.makeNew[1].loginname" value="yyy"/>
<input type="hidden" name="userSet.makeNew[2].loginname" value="ggg"/>
<!--OGNL表达式:map属性的写法 -->
<input type="hidden" name="map['jolin']" value="caiyilin"/>
<input type="hidden" name="map['jay']" value="zhoujielun"/>
<!--OGNL表达式:Tel属性的写法 -->
<input type="hidden" name="tel" value="010-66298878"/>
</form>
</body>
</html>
info.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>显示提交的数据</title>
</head>
<body>
<h3>显示提交的数据</h3><hr/>
<table>
<tr>
<td>登录名</td>
<td><s:property value="user.loginname"/> </td>
</tr>
<tr>
<td>生日</td>
<td><s:date name="user.birthday" format="yyyy-MM-dd HH:mm:ss"/></td>
</tr>
<tr>
<td>性别</td>
<td><s:property value="user.gender"/> </td>
</tr>
<tr>
<td>考试成绩</td>
<td><s:property value="user.score"/></td>
</tr>
<tr>
<td>电话号</td>
<td><s:property value="tel"/></td>
</tr>
<tr>
<td colspan="2"><input type="button" value=" 返回 " οnclick="history.go(-1);" /></td>
</tr>
</table>
<hr/><s:debug/>
</body>
</html>
error.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>出现内部错误</title>
</head>
<body>
<h3>出现内部错误</h3><hr/>
<s:actionerror/>
</body>
</html>