您的位置:首页 > 编程语言 > Java开发

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目录下添加配置文件,如果配置特定类的类型转换器,需要在该类的包下添加配置文件。

测试界面:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  struts2.0