struts2自定义类型转换
2017-07-10 19:24
405 查看
虽然struts2提供了很多自带的类型转换器,但是在实际开发中,这些转换器可能不够用,然后需要程序员开发一些类型转换器。这里我们通常开发类型转换器继承了org.apache.struts2.util.StrutsTypeConverter类,org.apache.struts2.util.StrutsTypeConverter的父类是com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter,com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter的父类是com.opensymphony.xwork2.conversion.TypeConverter。
org.apache.struts2.util.StrutsTypeConverter中要实现的方法:
public Object convertFromString(Map arg0, String[] arg1, Class arg2);
本方法将字符串数组转换成复合类型,arg0表示action上下文的map对象,arg1表示要转换的字符串数组,arg2表示要转换的目标类型。
public String convertToString(Map arg0, Object arg1);
本方法将复合类型转换成字符串类型,arg0表示action的上下文对象,arg1表示要转换的对象。
示例代码:
类型转换器UserInfoConverter.java:
package com.web.typeconverter;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
import com.web.entity.UserInfo;
/*
* 关于自定义类型转换器:
* 此处是一次只添加一个商品,如果要添加多个商品,对它们进行类型转换,就可以使用UserInfo的数组了,
* 可以使用循环逐一转换类型
* */
public class UserInfoConverter extends StrutsTypeConverter {
// 将字符串数组转换成复合类型
public Object convertFromString(Map arg0, String[] arg1, Class arg2) {
// 实例化UserInfo类
UserInfo user = new UserInfo();
/*
* 将传递过来的字符串以“/”分开存入数组proValues中, 如:传过来的是“meng/123/21/1995-06-14”
* 转换到proValues中的是:String[] proValues={"meng","123","21","1995-06-14"};
*/
System.out.println(arg1[0]);
String[] proValues = arg1[0].split("/");
// 将拆分后的字符串数组设置进实体类中
user.setUname(proValues[0]);
user.setUpass(proValues[1]);
user.setAge(Integer.parseInt(proValues[2]));
return user;
}
// 将复合类型转换成字符串类型
public String convertToString(Map arg0, Object arg1) {
UserInfo user = (UserInfo) arg1;
return "";
}
}
action类:UserInfoConverterAction.java:
package com.web.action;
import com.opensymphony.xwork2.ActionSupport;
import com.web.entity.UserInfo;
@SuppressWarnings("serial")
public class UserInfoConverterAction extends ActionSupport {
private UserInfo user1;
private UserInfo user2;
public String converterTest() {
return SUCCESS;
}
public UserInfo getUser1() {
return user1;
}
public void setUser1(UserInfo user1) {
this.user1 = user1;
}
public UserInfo getUser2() {
return user2;
}
public void setUser2(UserInfo user2) {
this.user2 = user2;
}
}
添加用户界面:index.jsp:
<h2>添加用户</h2>
<s:form action="UserInfoConverterAction!converterTest.action" method="post">
<s:textfield name="user1" label="用户一" size="50"></s:textfield>
<s:textfield name="user2" label="用户二" size="50"></s:textfield>
<s:submit value="确认添加"></s:submit>
</s:form>
显示用户界面:success.jsp:
<h2>添加成功显示用户</h2>
<table border="1" cellpadding="0" cellspacing="0" width="30%">
<tr>
<td>姓名</td>
<td>密码</td>
<td>年龄</td>
</tr>
<tr>
<td><s:property value="user1.uname"/></td>
<td><s:property value="user1.upass"/></td>
<td><s:property value="user1.age"/></td>
</tr>
<tr>
<td><s:property value="user2.uname"/></td>
<td><s:property value="user2.upass"/></td>
<td><s:property value="user2.age"/></td>
</tr>
</table>
配置类型转换器:xwork-conversion.properties:
com.web.entity.UserInfo=com.web.typeconverter.UserInfoConverter
关于类型转换器的配置问题:
注意:如果配置全局类型转换器可以直接在src目录下添加配置文件,如果配置特定类的类型转换器,需要在该类的包下添加配置文件。
测试界面:
org.apache.struts2.util.StrutsTypeConverter中要实现的方法:
public Object convertFromString(Map arg0, String[] arg1, Class arg2);
本方法将字符串数组转换成复合类型,arg0表示action上下文的map对象,arg1表示要转换的字符串数组,arg2表示要转换的目标类型。
public String convertToString(Map arg0, Object arg1);
本方法将复合类型转换成字符串类型,arg0表示action的上下文对象,arg1表示要转换的对象。
示例代码:
类型转换器UserInfoConverter.java:
package com.web.typeconverter;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
import com.web.entity.UserInfo;
/*
* 关于自定义类型转换器:
* 此处是一次只添加一个商品,如果要添加多个商品,对它们进行类型转换,就可以使用UserInfo的数组了,
* 可以使用循环逐一转换类型
* */
public class UserInfoConverter extends StrutsTypeConverter {
// 将字符串数组转换成复合类型
public Object convertFromString(Map arg0, String[] arg1, Class arg2) {
// 实例化UserInfo类
UserInfo user = new UserInfo();
/*
* 将传递过来的字符串以“/”分开存入数组proValues中, 如:传过来的是“meng/123/21/1995-06-14”
* 转换到proValues中的是:String[] proValues={"meng","123","21","1995-06-14"};
*/
System.out.println(arg1[0]);
String[] proValues = arg1[0].split("/");
// 将拆分后的字符串数组设置进实体类中
user.setUname(proValues[0]);
user.setUpass(proValues[1]);
user.setAge(Integer.parseInt(proValues[2]));
return user;
}
// 将复合类型转换成字符串类型
public String convertToString(Map arg0, Object arg1) {
UserInfo user = (UserInfo) arg1;
return "";
}
}
action类:UserInfoConverterAction.java:
package com.web.action;
import com.opensymphony.xwork2.ActionSupport;
import com.web.entity.UserInfo;
@SuppressWarnings("serial")
public class UserInfoConverterAction extends ActionSupport {
private UserInfo user1;
private UserInfo user2;
public String converterTest() {
return SUCCESS;
}
public UserInfo getUser1() {
return user1;
}
public void setUser1(UserInfo user1) {
this.user1 = user1;
}
public UserInfo getUser2() {
return user2;
}
public void setUser2(UserInfo user2) {
this.user2 = user2;
}
}
添加用户界面:index.jsp:
<h2>添加用户</h2>
<s:form action="UserInfoConverterAction!converterTest.action" method="post">
<s:textfield name="user1" label="用户一" size="50"></s:textfield>
<s:textfield name="user2" label="用户二" size="50"></s:textfield>
<s:submit value="确认添加"></s:submit>
</s:form>
显示用户界面:success.jsp:
<h2>添加成功显示用户</h2>
<table border="1" cellpadding="0" cellspacing="0" width="30%">
<tr>
<td>姓名</td>
<td>密码</td>
<td>年龄</td>
</tr>
<tr>
<td><s:property value="user1.uname"/></td>
<td><s:property value="user1.upass"/></td>
<td><s:property value="user1.age"/></td>
</tr>
<tr>
<td><s:property value="user2.uname"/></td>
<td><s:property value="user2.upass"/></td>
<td><s:property value="user2.age"/></td>
</tr>
</table>
配置类型转换器:xwork-conversion.properties:
com.web.entity.UserInfo=com.web.typeconverter.UserInfoConverter
关于类型转换器的配置问题:
注意:如果配置全局类型转换器可以直接在src目录下添加配置文件,如果配置特定类的类型转换器,需要在该类的包下添加配置文件。
测试界面:
相关文章推荐
- Struts2的自定义类型转换和简单的输入校验
- struts2自定义类型转换(1)基于DefaultTypeConverter
- Struts2的自动类型转换及自定义类型转换
- Struts2数据类型转换之自定义数据类型转换(二)
- struts2示例代码-自定义局部类型转换器和自定义全局类型转换器
- struts2自定义类型转换(1)基于DefaultTypeConverter
- Struts2自定义类型转换
- struts2自定义类型转换
- 4.1.4: Struts2的类型转换---自定义类型转换器
- struts2自定义类型转换
- struts2自定义类型转换(2)基于StrutsTypeConverter
- Struts2的自动类型转换及自定义类型转换
- Struts2自定义类型转换
- struts2_自定义类型转换失败的提示信息
- struts2 自定义类型转换
- 为struts2自定义类型转换器:Date的转换
- struts2自定义类型转换(2)基于StrutsTypeConverter
- 自定义 Struts2 类型转换器 (TypeCoverter)
- Struts2自定义类型转换,和处理类型转换错误
- 4.1.6: Struts2的类型转换---基于Struts2的自定义类型转换器