首页 新闻 论坛 问答 博客 招聘 更多 ▼
专栏 文摘 圈子 搜索 您还未登录 ! 我的应用 登录 注册 hhr-michael永久域名 http://hhr-michael.javaeye.com.struts2+hibernate3+spring2读书笔记6( ... | struts2+hibernate3+spring2读书笔记4(数据 ... 2010-05-27
struts2+hibernate3+spring2读书笔记5(类型转换)
文章分类:Java编程
第6章 类型转换
本章导读:
类型转换使用广泛,主要用在开发人员将一个字符串转换成更复杂些的对象类型时。因为web中的类型非常单一(在HTTP中所有的信息是String类型),而java是强类型的语言,因些mvc框架一般都会提供字符类型到其他对象类型的转换,Struts2提供了基于ognl表达式的功能强大的转换机制,而且还提供了良好的扩展性,允许开发人员创建自定义的类型转换器。
一.不使用struts2的类型转换器进行类型转换
1.建立工程
2.编写pojo类:User.java 内容如下:
Java代码
1. package amigo.struts.typeconversion;
2.
3.import java.util.Date;
4.
5.
6./**
7. * 用户的POJO类
8. * */
9.public class User {
10.
11. /**用户名*/
12. private String username;
13.
14. /**密码*/
15. private String password;
16.
17. /**性别*/
18. private int gender;
19.
20. /**年龄*/
21. private int age;
22.
23. /**出生日期*/
24. private Date birthDate;
25.
26. /**联系电话*/
27. private String tel;
28.
29. /**Email*/
30. private String email;
31.
32. public String getUsername() {
33. return username;
34. }
35.
36. public void setUsername(String username) {
37. this.username = username;
38. }
39.
40. public String getPassword() {
41. return password;
42. }
43.
44. public void setPassword(String password) {
45. this.password = password;
46. }
47.
48.
49.
50. public int getGender() {
51. return gender;
52. }
53.
54. public void setGender(int gender) {
55. this.gender = gender;
56. }
57.
58. public int getAge() {
59. return age;
60. }
61.
62. public void setAge(int age) {
63. this.age = age;
64. }
65.
66. public Date getBirthDate() {
67. return birthDate;
68. }
69.
70. public void setBirthDate(Date birthDate) {
71. this.birthDate = birthDate;
72. }
73.
74. public String getTel() {
75. return tel;
76. }
77.
78. public void setTel(String tel) {
79. this.tel = tel;
80. }
81.
82. public String getEmail() {
83. return email;
84. }
85.
86. public void setEmail(String email) {
87. this.email = email;
88. }
89.
90.
91.}
package amigo.struts.typeconversion;
import java.util.Date;
/**
* 用户的POJO类
* */
public class User {
/**用户名*/
private String username;
/**密码*/
private String password;
/**性别*/
private int gender;
/**年龄*/
private int age;
/**出生日期*/
private Date birthDate;
/**联系电话*/
private String tel;
/**Email*/
private String email;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getGender() {
return gender;
}
public void setGender(int gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Date getBirthDate() {
return birthDate;
}
public void setBirthDate(Date birthDate) {
this.birthDate = birthDate;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
3.编写Action类:simpleConvertionAction.java
Java代码
1.package amigo.struts.typeconversion;
2.
3.import java.text.SimpleDateFormat;
4.
5.import javax.servlet.http.HttpServletRequest;
6.
7.import org.apache.struts2.interceptor.ServletRequestAware;
8.
9.import com.opensymphony.xwork2.ActionSupport;
10.
11.public class SimpleConvertionAction extends ActionSupport implements ServletRequestAware {
12. private User user;
13. private HttpServletRequest request;
14. public User getUser() {
15. return user;
16. }
17. public void setUser(User user) {
18. this.user = user;
19. }
20. public HttpServletRequest getRequest() {
21. return request;
22. }
23. public void setServletRequest(HttpServletRequest request) {
24. this.request = request;
25. }
26.
27. /**
28. * 完成用户注册.
29. * 在组装User对象时需要进行gender、age和birthDate属性的强制转换
30. * */
31. public String execute(){
32. try{
33. String username=request.getParameter("username");
34. String password=request.getParameter("password");
35. String gender=request.getParameter("gender");
36. String age=request.getParameter("age");
37. String birthDate=request.getParameter("birthDate")==null?"":request.getParameter("birthDate");
38. String tel=request.getParameter("tel");
39. String email=request.getParameter("email");
40.
41. user = new User();
42.
43. user.setUsername(username);
44. user.setPassword(password);
45. user.setTel(tel);
46. user.setEmail(email);
47.
48.
49. //gender、age和birthDate进行强制类型转换
50. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
51. user.setGender(Integer.parseInt(gender));
52. user.setAge(Integer.parseInt(age));
53. user.setBirthDate(sdf.parse(birthDate));
54.
55.
56. return this.SUCCESS;
57. }catch(Exception ex){
58. request.setAttribute("errorMessage","操作失败:"+ex.getMessage()) ;
59. ex.printStackTrace();
60. return this.ERROR;
61. }
62.
63. }
64.
65.}
package amigo.struts.typeconversion;
import java.text.SimpleDateFormat;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.interceptor.ServletRequestAware;
import com.opensymphony.xwork2.ActionSupport;
public class SimpleConvertionAction extends ActionSupport implements ServletRequestAware {
private User user;
private HttpServletRequest request;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public HttpServletRequest getRequest() {
return request;
}
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
/**
* 完成用户注册.
* 在组装User对象时需要进行gender、age和birthDate属性的强制转换
* */
public String execute(){
try{
String username=request.getParameter("username");
String password=request.getParameter("password");
String gender=request.getParameter("gender");
String age=request.getParameter("age");
String birthDate=request.getParameter("birthDate")==null?"":request.getParameter("birthDate");
String tel=request.getParameter("tel");
String email=request.getParameter("email");
user = new User();
user.setUsername(username);
user.setPassword(password);
user.setTel(tel);
user.setEmail(email);
//gender、age和birthDate进行强制类型转换
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
user.setGender(Integer.parseInt(gender));
user.setAge(Integer.parseInt(age));
user.setBirthDate(sdf.parse(birthDate));
return this.SUCCESS;
}catch(Exception ex){
request.setAttribute("errorMessage","操作失败:"+ex.getMessage()) ;
ex.printStackTrace();
return this.ERROR;
}
}
}
4.编写注册页面:simpleReg.jsp
Java代码
1. <%@ page language="java" contentType="text/html; charset=UTF-8"
2. pageEncoding="UTF-8"%>
3.<%@ taglib prefix="s" uri="/struts-tags" %>
4.
5.<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
6.<html>
7.<head>
8.<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
9.<title>用户注册</title>
10.</head>
11.<body>
12. <s:form action="simpleConversion">
13. <s:textfield name="username" label="用户名"></s:textfield>
14. <s:password name="password" label="密码"></s:password>
15. <s:select label="性别" name="gender" list="#{'1':'男','0':'女'}" listKey="key" listValue="value" value="0">
16. </s:select>
17. <s:textfield name="age" label="年龄"></s:textfield>
18. <s:textfield name="birthDate" label="出生日期"></s:textfield>
19. <s:textfield name="tel" label="联系电话"></s:textfield>
20. <s:textfield name="email" label="Email"></s:textfield>
21. <s:submit></s:submit>
22.
23.
24. </s:form>
25.</body>
26.</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>用户注册</title>
</head>
<body>
<s:form action="simpleConversion">
<s:textfield name="username" label="用户名"></s:textfield>
<s:password name="password" label="密码"></s:password>
<s:select label="性别" name="gender" list="#{'1':'男','0':'女'}" listKey="key" listValue="value" value="0">
</s:select>
<s:textfield name="age" label="年龄"></s:textfield>
<s:textfield name="birthDate" label="出生日期"></s:textfield>
<s:textfield name="tel" label="联系电话"></s:textfield>
<s:textfield name="email" label="Email"></s:textfield>
<s:submit></s:submit>
</s:form>
</body>
</html>
5.注册成功页面:simpleRegSuccess.jsp
Java代码
1. <%@ page language="java" contentType="text/html; charset=UTF-8"
2. pageEncoding="UTF-8"%>
3.<%@ taglib prefix="s" uri="/struts-tags" %>
4.<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
5.<html>
6.<head>
7.<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
8.<title>注册成功</title>
9.</head>
10.<body>
11. 注册成功!注册信息如下:
12. 用户名:<s:property value="user.username"/><br/>
13. 密码: <s:property value="user.password"/><br/>
14. 性别: <s:property value="user.gender"/><br/>
15. 年龄: <s:property value="user.age"/><br/>
16. 出生日期:<s:property value="user.birthDate"/><br/>
17. 联系电话:<s:property value="user.tel"/><br/>
18. Email: <s:property value="user.email"/><br/>
19.</body>
20.</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>注册成功</title>
</head>
<body>
注册成功!注册信息如下:
用户名:<s:property value="user.username"/><br/>
密码: <s:property value="user.password"/><br/>
性别: <s:property value="user.gender"/><br/>
年龄: <s:property value="user.age"/><br/>
出生日期:<s:property value="user.birthDate"/><br/>
联系电话:<s:property value="user.tel"/><br/>
Email: <s:property value="user.email"/><br/>
</body>
</html>
6.注册失败页面:error.jsp
Java代码
1. <%@ page language="java" contentType="text/html; charset=UTF-8"
2. pageEncoding="UTF-8"%>
3.<%@ taglib prefix="s" uri="/struts-tags" %>
4.<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
5.<html>
6.<head>
7.<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
8.<title>操作失败界面</title>
9.</head>
10.<body>
11.<s:property value="#request.errorMessage"/>
12.</body>
13.</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>操作失败界面</title>
</head>
<body>
<s:property value="#request.errorMessage"/>
</body>
</html>
7.Struts2配置文件:struts.xml
Java代码
1. <!DOCTYPE struts PUBLIC
2."-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
3."http://struts.apache.org/dtds/struts-2.0.dtd">
4.
5.<struts>
6.
7. <include file="struts-default.xml"/>
8. <package name="amigo" extends="struts-default">
9.
10. <action name="simpleConversion" class="amigo.struts.typeconversion.SimpleConvertionAction">
11. <result name="success">/typeConversion/simpleRegSuccess.jsp</result>
12. <result name="error">/typeConversion/error.jsp</result>
13. </action>
14.
15. </package>
16.</struts>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<include file="struts-default.xml"/>
<package name="amigo" extends="struts-default">
<action name="simpleConversion" class="amigo.struts.typeconversion.SimpleConvertionAction">
<result name="success">/typeConversion/simpleRegSuccess.jsp</result>
<result name="error">/typeConversion/error.jsp</result>
</action>
</package>
</struts>
呵呵,以上7步就完成了不使用struts的类型转换,下面我们来看看继承DefaultConverter类型转换。
二.继承DefaultConverter类进行型转换
1. 编写用户信息转换的类型转换器:UserConveerter.java,该类型转换器用于将用户信息进行解析,解析后将其放置到user对象中,代码如下:
Java代码
1. package amigo.struts.typeconversion;
2.
3.import java.util.Map;
4.
5.import ognl.DefaultTypeConverter;
6.
7./**
8. * User对象转换器
9. * */
10.
11.public class UserConverter extends DefaultTypeConverter {
12. public Object convertValue(Map context,Object value,Class toType){
13. if(toType==User.class){
14. String[]params=(String[])value;
15. User user=new User();
16. String[]userInfo=params[0].split(",");
17. user.setUsername(userInfo[0]);
18. user.setPassword(userInfo[1]);
19. return user;
20. }
21. return null;
22. }
23.
24.}
package amigo.struts.typeconversion;
import java.util.Map;
import ognl.DefaultTypeConverter;
/**
* User对象转换器
* */
public class UserConverter extends DefaultTypeConverter {
public Object convertValue(Map context,Object value,Class toType){
if(toType==User.class){
String[]params=(String[])value;
User user=new User();
String[]userInfo=params[0].split(",");
user.setUsername(userInfo[0]);
user.setPassword(userInfo[1]);
return user;
}
return null;
}
}2. 编写Action类:DefaultConvertionAction.java,该类包含一个user属性,user对象的转换由转换器类UserConverter.java类完成,DefaultConvertionAction.java的代码如下:
Java代码
1. package amigo.struts.typeconversion;
2.
3.import javax.servlet.http.HttpServletRequest;
4.
5.import org.apache.struts2.interceptor.ServletRequestAware;
6.
7.import com.opensymphony.xwork2.ActionSupport;
8.
9.public class DefaultConvertionAction extends ActionSupport implements ServletRequestAware{
10.
11. private User user;
12. private HttpServletRequest request;
13. public User getUser() {
14. return user;
15. }
16. public void setUser(User user) {
17. this.user = user;
18. }
19. public HttpServletRequest getRequest() {
20. return request;
21. }
22. public void setServletRequest(HttpServletRequest request) {
23. this.request = request;
24. }
25.
26. /**
27. * 完成用户注册
28. * 使用UserConverter转换器
29. * */
30. public String execute(){
31. try{
32. System.out.print(this.getUser().getUsername());
33. System.out.print(this.getUser().getPassword());
34. return SUCCESS;
35.
36. }catch(Exception ex){
37. request.setAttribute("errorMessage", "操作失败:"+ex.getMessage());
38. ex.printStackTrace();
39. return ERROR;
40.
41. }
42.
43.
44. }
45.}
package amigo.struts.typeconversion;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.interceptor.ServletRequestAware;
import com.opensymphony.xwork2.ActionSupport;
public class DefaultConvertionAction extends ActionSupport implements ServletRequestAware{
private User user;
private HttpServletRequest request;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public HttpServletRequest getRequest() {
return request;
}
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
/**
* 完成用户注册
* 使用UserConverter转换器
* */
public String execute(){
try{
System.out.print(this.getUser().getUsername());
System.out.print(this.getUser().getPassword());
return SUCCESS;
}catch(Exception ex){
request.setAttribute("errorMessage", "操作失败:"+ex.getMessage());
ex.printStackTrace();
return ERROR;
}
}
}
3. 编写jsp页面:defaultConversionReg.jsp,该页面提供给用户输入注册信息:用户名和密码,两者之间以英文逗号隔开,该页面将请求提供给DefaultConvertionAction.该页面的代码如下:
Java代码
1. <%@ page language="java" contentType="text/html; charset=UTF-8"
2. pageEncoding="UTF-8"%>
3.<%@ taglib prefix="s" uri="/struts-tags" %>
4.<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
5.<html>
6.<head>
7.<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
8.<title>DefaultTypeConverter扩展实例</title>
9.</head>
10.<body>
11. <s:form action="defaultConvertion">
12. 说明:用户名、密码信息以英文逗号隔开<br/>
13. <s:textfield name="user" label="用户信息"></s:textfield>
14. <s:submit></s:submit>
15.
16. </s:form>
17.</body>
18.</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>DefaultTypeConverter扩展实例</title>
</head>
<body>
<s:form action="defaultConvertion">
说明:用户名、密码信息以英文逗号隔开<br/>
<s:textfield name="user" label="用户信息"></s:textfield>
<s:submit></s:submit>
</s:form>
</body>
</html>
4. 类型转换文件:DefaultConvertionAction-conversion.properties,内容为:
Java代码
1.user=amigo.struts.typeconversion.UserConverter
user=amigo.struts.typeconversion.UserConverter
该文件是局部的类型转换器放在需要进行转换的Acion类的同一个包中。
5. 修改struts.xml文件 ,具体内容如下:
Java代码
1.<action name="defaultConvertion" class="amigo.struts.typeconversion.DefaultConvertionAction">
2. <result >/typeConversion/simpleRegSuccess.jsp</result>
3. <result name="error">/typeConversion/error.jsp</result>
4. </action>
<action name="defaultConvertion" class="amigo.struts.typeconversion.DefaultConvertionAction">
<result >/typeConversion/simpleRegSuccess.jsp</result>
<result name="error">/typeConversion/error.jsp</result>
</action>
经过以上五步后,完成了继承DefaultConverter类进行型转换
三.继承StrutsTypeConverter类进行类型转换
1. 编写类型转换器:UserStrutsConverter.java
Java代码
1. package amigo.struts.typeconversion;
2.
3.import java.util.Map;
4.
5.import org.apache.struts2.util.StrutsTypeConverter;
6.
7./**
8. * User对象转换器(扩展struts TypeConverter类)
9. * */
10.
11.public class UserStrutsConverter extends StrutsTypeConverter {
12.
13.
14. /**
15. * 从string类型转换为User对象
16. * */
17. @Override
18. public Object convertFromString(Map context, String[] values, Class toClass) {
19. // TODO Auto-generated method stub
20.
21. String[]params=(String[])values;
22. User user=new User();
23. String[]userInfo=params[0].split(",");
24. user.setUsername(userInfo[0]);
25. user.setPassword(userInfo[1]);
26. return user;
27.
28.
29. }
30.
31. @Override
32. public String convertToString(Map context, Object o) {
33. // TODO Auto-generated method stub
34. return null;
35. }
36.
37.}
38.
package amigo.struts.typeconversion;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
/**
* User对象转换器(扩展struts TypeConverter类)
* */
public class UserStrutsConverter extends StrutsTypeConverter {
/**
* 从string类型转换为User对象
* */
@Override
public Object convertFromString(Map context, String[] values, Class toClass) {
// TODO Auto-generated method stub
String[]params=(String[])values;
User user=new User();
String[]userInfo=params[0].split(",");
user.setUsername(userInfo[0]);
user.setPassword(userInfo[1]);
return user;
}
@Override
public String convertToString(Map context, Object o) {
// TODO Auto-generated method stub
return null;
}
}
2.修改类型转换器配置文件,将User对象的类型转换器修改为
Java代码
1.user=amigo.struts.typeconversion.UserStrutsConverter
user=amigo.struts.typeconversion.UserStrutsConverter
以上两步实现了继承StrutsTypeConverter类进行类型转换
四.数组的类型转换
在前面的内容中,讲解了当请求参数为单个值时如何进行类型转换,本实例讲解当属性的类型为数组时如何进行转换。
1. 编写数组属性类型转换器:UserArrayStrutsConverter.java
Java代码
1. package amigo.struts.typeconversion;
2.
3.import java.util.Map;
4.
5.import org.apache.struts2.util.StrutsTypeConverter;
6.
7. /**
8. * User对象转换器(扩展struts TypeConverter类)
9. * */
10.public class UserArrayStrutsConverter extends StrutsTypeConverter {
11. /**
12. * 从string类型转换为User数组对象
13. * */
14. @Override
15. public Object convertFromString(Map context, String[] values, Class toclass) {
16. User[] userArray=new User[values.length];
17. for(int i=0;i<values.length;i++){
18. User user=new User();
19. String[]userInfo=values[i].split(",");
20. System.out.print(userInfo[1]);
21. user.setUsername(userInfo[0]);
22. System.out.print(user.getUsername());
23. user.setPassword(userInfo[1]);
24. System.out.print(user.getPassword());
25. userArray[i]=user;
26. }
27.
28. if(values.length==1){
29. return userArray[0];
30. }else{
31. return userArray;
32.
33. }
34. }
35.
36. @Override
37. public String convertToString(Map context, Object o) {
38. // TODO Auto-generated method stub
39. return null;
40. }
41.
42.}
package amigo.struts.typeconversion;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
/**
* User对象转换器(扩展struts TypeConverter类)
* */
public class UserArrayStrutsConverter extends StrutsTypeConverter {
/**
* 从string类型转换为User数组对象
* */
@Override
public Object convertFromString(Map context, String[] values, Class toclass) {
User[] userArray=new User[values.length];
for(int i=0;i<values.length;i++){
User user=new User();
String[]userInfo=values[i].split(",");
System.out.print(userInfo[1]);
user.setUsername(userInfo[0]);
System.out.print(user.getUsername());
user.setPassword(userInfo[1]);
System.out.print(user.getPassword());
userArray[i]=user;
}
if(values.length==1){
return userArray[0];
}else{
return userArray;
}
}
@Override
public String convertToString(Map context, Object o) {
// TODO Auto-generated method stub
return null;
}
}
2.编写Action类:UserArrayConvertionAction.java
Java代码
1.package amigo.struts.typeconversion;
2.
3.import javax.servlet.http.HttpServletRequest;
4.
5.import org.apache.struts2.interceptor.ServletRequestAware;
6.
7.import com.opensymphony.xwork2.ActionSupport;
8.
9.public class UserArrayConvertionAction extends ActionSupport implements ServletRequestAware {
10.
11. private User[] user;
12. private HttpServletRequest request;
13. public User[] getUser() {
14.
15. return user;
16. }
17. public void setUser(User[] user) {
18. this.user = user;
19. }
20. public HttpServletRequest getRequest() {
21. return request;
22. }
23. public void setServletRequest(HttpServletRequest request) {
24. this.request = request;
25. }
26.
27.
28. public String execute(){
29. try{
30. return this.SUCCESS;
31. }catch(Exception ex){
32. request.setAttribute("errorMessage","操作失败:"+ex.getMessage());
33. ex.printStackTrace();
34. return this.ERROR;
35.
36.
37. }
38.
39. }
40.}
package amigo.struts.typeconversion;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.interceptor.ServletRequestAware;
import com.opensymphony.xwork2.ActionSupport;
public class UserArrayConvertionAction extends ActionSupport implements ServletRequestAware {
private User[] user;
private HttpServletRequest request;
public User[] getUser() {
return user;
}
public void setUser(User[] user) {
this.user = user;
}
public HttpServletRequest getRequest() {
return request;
}
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
public String execute(){
try{
return this.SUCCESS;
}catch(Exception ex){
request.setAttribute("errorMessage","操作失败:"+ex.getMessage());
ex.printStackTrace();
return this.ERROR;
}
}
}3.编写填写注册信息页面:userArrayReg.jsp
Java代码
1. <%@ page language="java" contentType="text/html; charset=UTF-8"
2. pageEncoding="UTF-8"%>
3.<%@ taglib prefix="s" uri="/struts-tags" %>
4.<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
5.<html>
6.<head>
7.<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
8.<title>用户注册页面:</title>
9.</head>
10.<body>
11. <s:form action="userArrayConvertion">
12. 说明:用户名、密码信息以英文逗号隔开<br/>
13. <s:textfield name="user" label="用户信息1"></s:textfield>
14. <s:textfield name="user" label="用户信息2"></s:textfield>
15. <s:submit></s:submit>
16. </s:form>
17.</body>
18.</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>用户注册页面:</title>
</head>
<body>
<s:form action="userArrayConvertion">
说明:用户名、密码信息以英文逗号隔开<br/>
<s:textfield name="user" label="用户信息1"></s:textfield>
<s:textfield name="user" label="用户信息2"></s:textfield>
<s:submit></s:submit>
</s:form>
</body>
</html>4.编写注册成功页面:userArrayRegSuccess.jsp
Java代码
1.<%@ page language="java" contentType="text/html; charset=UTF-8"
2. pageEncoding="UTF-8"%>
3.<%@ taglib prefix="s" uri="/struts-tags" %>
4.<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
5.<html>
6.<head>
7.<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
8.<title>注册成功</title>
9.</head>
10.<body>
11. 数组类型转换成功!
12. <s:iterator value="user" status="st">
13. <br/>用户<s:property value="#st.index"/>的信息:<br/>
14. 用户名:<s:property value="user[#st.index].username"/><br/>
15. 密码:<s:property value="user[#st.index].password"/>
16.
17. </s:iterator>
18.</body>
19.</html>
20.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>注册成功</title>
</head>
<body>
数组类型转换成功!
<s:iterator value="user" status="st">
<br/>用户<s:property value="#st.index"/>的信息:<br/>
用户名:<s:property value="user[#st.index].username"/><br/>
密码:<s:property value="user[#st.index].password"/>
</s:iterator>
</body>
</html>
5.配置类型转换器:
在xwork-conversion.properties中修改转换器为:
Java代码
1.Amigo.struts.typeconversion.User=amogo.struts.typeconversion.UserArrayStrutsConverter
Amigo.struts.typeconversion.User=amogo.struts.typeconversion.UserArrayStrutsConverter6.配置struts.xml
Java代码
1.<!--数组属性转换实例 -->
2.<action name="userArrayConvertion" class="amigo.struts.typeconversion.UserArrayConvertionAction">
3.<result >/typeConversion/userArrayRegSuccess.jsp</result>
4.<result name="error">/typeConversion/error.jsp</result>
5.</action>
<!--数组属性转换实例 -->
<action name="userArrayConvertion" class="amigo.struts.typeconversion.UserArrayConvertionAction">
<result >/typeConversion/userArrayRegSuccess.jsp</result>
<result name="error">/typeConversion/error.jsp</result>
</action>
经过以上六步后,数组的类型转换完成。
五.集合的类型转换
常用的集合包括List和Map,本实例讲解当Action中user为List集合时,如何实现类型转换(和数组类似)
1. 编写list集合类型转换器:UserListStrutsConverter.java,代码如下:
Java代码
1. package amigo.struts.typeconversion;
2.
3.import java.util.ArrayList;
4.import java.util.List;
5.import java.util.Map;
6.
7.import org.apache.struts2.util.StrutsTypeConverter;
8.
9.public class UserListStrutsConverter extends StrutsTypeConverter {
10.
11. @Override
12. public Object convertFromString(Map context, String[] values, Class toClass) {
13. // TODO Auto-generated method stub
14.
15.
16. List<User> userlist = new ArrayList<User>();
17. for(int i=0;i<values.length;i++){
18. User user = new User();
19. String[] userInfo = values[i].split(",");
20. user.setUsername(userInfo[0]);
21. user.setPassword(userInfo[1]);
22. userlist.add(user);
23. }
24.
25. if(values.length==1){
26. return userlist.get(0);
27. }else{
28. return userlist;
29. }
30.
31.
32.
33. }
34. /**
35. * 从User字符串转换为字符串,因为本实例没有用到,实现暂略.
36. */
37. @Override
38. public String convertToString(Map context, Object o) {
39. // TODO Auto-generated method stub
40. return null;
41. }
42.
43.}
package amigo.struts.typeconversion;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
public class UserListStrutsConverter extends StrutsTypeConverter {
@Override
public Object convertFromString(Map context, String[] values, Class toClass) {
// TODO Auto-generated method stub
List<User> userlist = new ArrayList<User>();
for(int i=0;i<values.length;i++){
User user = new User();
String[] userInfo = values[i].split(",");
user.setUsername(userInfo[0]);
user.setPassword(userInfo[1]);
userlist.add(user);
}
if(values.length==1){
return userlist.get(0);
}else{
return userlist;
}
}
/**
* 从User字符串转换为字符串,因为本实例没有用到,实现暂略.
*/
@Override
public String convertToString(Map context, Object o) {
// TODO Auto-generated method stub
return null;
}
}
2. 编写Action类:UserListConvertionAction.java 具体代码如下:
Java代码
1. package amigo.struts.typeconversion;
2.
3.import java.util.List;
4.
5.import javax.servlet.http.HttpServletRequest;
6.
7.import org.apache.struts2.interceptor.ServletRequestAware;
8.
9.import com.opensymphony.xwork2.ActionSupport;
10.
11.public class UserListConvertionAction extends ActionSupport implements ServletRequestAware {
12.
13. private List<User> user;
14. private HttpServletRequest request;
15. public List<User> getUser() {
16.
17. return user;
18. }
19. public void setUser(List<User> user) {
20. this.user = user;
21. }
22. public HttpServletRequest getRequest() {
23. return request;
24. }
25. public void setServletRequest(HttpServletRequest request) {
26. this.request = request;
27. }
28.
29.
30. public String execute(){
31. try{
32. return this.SUCCESS;
33. }catch(Exception ex){
34. request.setAttribute("errorMessage","操作失败:"+ex.getMessage());
35. ex.printStackTrace();
36. return this.ERROR;
37.
38.
39. }
40.
41. }
42.}
package amigo.struts.typeconversion;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.interceptor.ServletRequestAware;
import com.opensymphony.xwork2.ActionSupport;
public class UserListConvertionAction extends ActionSupport implements ServletRequestAware {
private List<User> user;
private HttpServletRequest request;
public List<User> getUser() {
return user;
}
public void setUser(List<User> user) {
this.user = user;
}
public HttpServletRequest getRequest() {
return request;
}
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
public String execute(){
try{
return this.SUCCESS;
}catch(Exception ex){
request.setAttribute("errorMessage","操作失败:"+ex.getMessage());
ex.printStackTrace();
return this.ERROR;
}
}
}3. 编写填写注册信息页面:userListReg.jsp
Java代码
1. <%@ page language="java" contentType="text/html; charset=UTF-8"
2. pageEncoding="UTF-8"%>
3.<%@ taglib prefix="s" uri="/struts-tags" %>
4.<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
5.<html>
6.<head>
7.<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
8.<title>用户注册页面:</title>
9.</head>
10.<body>
11. <s:form action="userListConvertion">
12. 说明:用户名、密码信息以英文逗号隔开<br/>
13. <s:textfield name="user" label="用户信息1"></s:textfield>
14. <s:textfield name="user" label="用户信息2"></s:textfield>
15. <s:submit></s:submit>
16. </s:form>
17.</body>
18.</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>用户注册页面:</title>
</head>
<body>
<s:form action="userListConvertion">
说明:用户名、密码信息以英文逗号隔开<br/>
<s:textfield name="user" label="用户信息1"></s:textfield>
<s:textfield name="user" label="用户信息2"></s:textfield>
<s:submit></s:submit>
</s:form>
</body>
</html>
4.第四步:编写注册成功页面:userListRegSuccess.jsp 代码如下:
Java代码
1. <%@ page language="java" contentType="text/html; charset=UTF-8"
2. pageEncoding="UTF-8"%>
3.<%@ taglib prefix="s" uri="/struts-tags" %>
4.<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
5.<html>
6.<head>
7.<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
8.<title>注册成功</title>
9.</head>
10.<body>
11. <table width="50%">
12. <tr style="backgroup-color:powderblue;font-weight:bold;">
13. <td>序号</td>
14. <td>用户名</td>
15. <td>密码</td>
16. </tr>
17. <s:iterator value="user" status="st">
18. <tr>
19. <td><s:property value="#st.index"/></td>
20. <td><s:property value="user[#st.index].username"/></td>
21. <td><s:property value="user[#st.index].password"/></td>
22. </tr>
23.
24. </s:iterator>
25. </table>
26.</body>
27.</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>注册成功</title>
</head>
<body>
<table width="50%">
<tr style="backgroup-color:powderblue;font-weight:bold;">
<td>序号</td>
<td>用户名</td>
<td>密码</td>
</tr>
<s:iterator value="user" status="st">
<tr>
<td><s:property value="#st.index"/></td>
<td><s:property value="user[#st.index].username"/></td>
<td><s:property value="user[#st.index].password"/></td>
</tr>
</s:iterator>
</table>
</body>
</html>
5.配置类型转换器(局部的类型转换器),在包目录下建立类型转换文件UserListConvertionAction-conversion.properties,具体内容如下:
Java代码
1.User=amigo.struts.typeconversion.UserListStrutsConverter
User=amigo.struts.typeconversion.UserListStrutsConverter
6.配置struts.xml
Java代码
1.<!-- List集合转换实例 -->
2. <action name="userListConvertion" class="amigo.struts.typeconversion.UserListConvertionAction">
3. <result >/typeConversion/userListRegSuccess.jsp</result>
4. <result name="error">/typeConversion/error.jsp</result>
5. </action>
<!-- List集合转换实例 -->
<action name="userListConvertion" class="amigo.struts.typeconversion.UserListConvertionAction">
<result >/typeConversion/userListRegSuccess.jsp</result>
<result name="error">/typeConversion/error.jsp</result>
</action>
以上六步完成了集合的类型转换。
六.类型转换的错误处理
1. 编写Action类:ExceptionConverter.java
Java代码
1.package amigo.struts.typeconversion;
2.
3.import java.util.Date;
4.
5.import com.opensymphony.xwork2.ActionSupport;
6.
7./**
8. * 演示Struts中类型转换的错误处理
9. * */
10.public class ExceptionConverter extends ActionSupport {
11. /**
12. * 用户名.
13. * */
14. private String username;
15.
16. /**
17. * 年龄
18. * */
19. private int age;
20.
21. /**
22. * 出生日期
23. * */
24. private Date birthDate;
25.
26.
27. public String getUsername() {
28. return username;
29. }
30.
31.
32.
33. public void setUsername(String username) {
34. this.username = username;
35. }
36.
37.
38.
39. public int getAge() {
40. return age;
41. }
42.
43.
44.
45. public void setAge(int age) {
46. this.age = age;
47. }
48.
49.
50.
51. public Date getBirthDate() {
52. return birthDate;
53. }
54.
55.
56.
57. public void setBirthDate(Date birthDate) {
58. this.birthDate = birthDate;
59. }
60.
61. public String execute(){
62. return null;
63.
64. }
65.
66.
67.}
package amigo.struts.typeconversion;
import java.util.Date;
import com.opensymphony.xwork2.ActionSupport;
/**
* 演示Struts中类型转换的错误处理
* */
public class ExceptionConverter extends ActionSupport {
/**
* 用户名.
* */
private String username;
/**
* 年龄
* */
private int age;
/**
* 出生日期
* */
private Date birthDate;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Date getBirthDate() {
return birthDate;
}
public void setBirthDate(Date birthDate) {
this.birthDate = birthDate;
}
public String execute(){
return null;
}
}
2.编写jsp页面:exceptinConversionReg.jsp
Java代码
1.<%@ page language="java" contentType="text/html; charset=UTF-8"
2. pageEncoding="UTF-8"%>
3.<%@ taglib prefix="s" uri="/struts-tags" %>
4.
5.<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
6.<html>
7.<head>
8.<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
9.<title>演示Struts中类型转换的错误处理</title>
10.</head>
11.<body>
12. <s:form action="exceptionConvertion">
13. <s:textfield name="username" label="用户名"></s:textfield>
14. <s:textfield name="age" label="年龄"></s:textfield>
15. <s:textfield name="birthDate" label="出生日期"></s:textfield>
16. <s:submit></s:submit>
17. </s:form>
18.</body>
19.</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>演示Struts中类型转换的错误处理</title>
</head>
<body>
<s:form action="exceptionConvertion">
<s:textfield name="username" label="用户名"></s:textfield>
<s:textfield name="age" label="年龄"></s:textfield>
<s:textfield name="birthDate" label="出生日期"></s:textfield>
<s:submit></s:submit>
</s:form>
</body>
</html>
3.修改Struts2配置文件:struts.xml
Java代码
1.<!-- 演示类型转换的错误处理实例 -->
2. <action name="exceptionConvertion" class="amigo.struts.typeconversion.ExceptionConverter">
3. <result name="input">/typeConversion/exceptionConversionReg.jsp</result>
4. </action>
<!-- 演示类型转换的错误处理实例 -->
<action name="exceptionConvertion" class="amigo.struts.typeconversion.ExceptionConverter">
<result name="input">/typeConversion/exceptionConversionReg.jsp</result>
</action>
4.建立局部资源文件:ExceptionConvertionAction.properties(在ExceptionConvertionAction所在的包里新建)
Java代码
1. invalid.fieldvalue.age=/u5e74/u9f84/u8f93/u5165/u4e0d/u5408/u6cd5/uff0c/u7c7b/u578b/u8f6c/u6362/u5931/u8d25(内容为:年龄输入不合法,类型转换失败)
2.invalid.fieldvalue.birthDate=/u51fa/u751f/u65e5/u671f/u5e94/u4e3ayyyy-MM-dd/u683c/u5f0f
3.(内容为:出生日期应为yyyy-MM-dd格式)
invalid.fieldvalue.age=/u5e74/u9f84/u8f93/u5165/u4e0d/u5408/u6cd5/uff0c/u7c7b/u578b/u8f6c/u6362/u5931/u8d25(内容为:年龄输入不合法,类型转换失败)
invalid.fieldvalue.birthDate=/u51fa/u751f/u65e5/u671f/u5e94/u4e3ayyyy-MM-dd/u683c/u5f0f
(内容为:出生日期应为yyyy-MM-dd格式)
最后经过以上4步就完成了类型转换的错误处理了。
struts2+hibernate3+spring2读书笔记6( ... | struts2+hibernate3+spring2读书笔记4(数据 ... 11:45浏览 (38)评论 (0)分类: struts+hibernate+spring學習相关推荐评论发表评论
表情图标
字体颜色: 标准深红红色橙色棕色黄色绿色橄榄青色蓝色深蓝靛蓝紫色灰色白色黑色 字体大小: 标准1 (xx-small)2 (x-small)3 (small)4 (medium)5 (large)6 (x-large)7 (xx-large) 对齐: 标准居左居中居右
提示:选择您需要装饰的文字, 按上列按钮即可添加上相应的标签.您还没有登录,请登录后发表评论(快捷键 Alt+S / Ctrl+Enter)
hhr_michael
浏览: 4762 次
性别:
来自: 惠州
详细资料 留言簿
搜索本博客
最近访客 >>更多访客
qljobswpfwupengfeiwpf土豆皮mianhuatangone.博客分类
■全部博客 (45)
■java學習 (15)
■PHP學習 (2)
■javascript (12)
■vba excel (1)
■英語學習 (1)
■k3安裝與配置 (1)
■html學習 (1)
■struts+hibernate+spring學習 (11)
■数据库学习 (1)
我的留言簿 >>更多留言
■漂过
-- by xw302
其他分类
■我的收藏 (0)
■我的论坛主题贴 (0)
■我的所有论坛贴 (0)
■我的精华良好贴 (0)
最近加入圈子
存档
■2010-06 (7)
■2010-05 (6)
■2010-03 (1)
■更多存档...
最新评论
■struts2+hibernate3+sprin ...
恩,LZ,谢谢了,那我还是练习把SSh的例子改成S2sh的吧,呵呵,哎,现在s2s ...
-- by lixia0417
■struts2+hibernate3+sprin ...
哥们,你好,这本书着重s2sh的各个部分开发,而整合的例子不是很多,只有三章是整合 ...
-- by hhr_michael
■struts2+hibernate3+sprin ...
对,哥们,问一下,这本书中关于S2SH整合开发的例子多吗,就是用三个框架一起开发的 ...
-- by lixia0417
■struts2+hibernate3+sprin ...
谢谢提醒,由于只是着重校验的过程,所以这代码没有在struts.xml中配置对应的 ...
-- by hhr_michael
■struts2+hibernate3+sprin ...
楼主写得不错,受教了, 不过觉得<code> public Stri ...
-- by lixia0417
评论排行榜
■struts2+hibernate3+spring2读书笔记4(数据 ...
■js生成行,刪除行,復制行
■struts2+hibernate3+spring2读书笔记11( ...
■JSP环境配置使用fckeditor
■struts2+hibernate3+spring2读书笔记10( ...
[什么是RSS?]
.
--------------------------------------------------------------------------------
声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。若作者同意转载,必须以超链接形式标明文章原始出处和作者。
? 2003-2010 JavaEye.com. All rights reserved. 上海炯耐计算机软件有限公司 [ 沪ICP备05023328号 ] .