Struts2只提供了一些int,double等基本类型的数据转换,但对于一些非基本类型的数据,Struts2则提供了很
好的扩展,即让需要转换的对象集成DefaultTypeConverter类或者StrutsTypeConverter类,获得一个类型转换器的入口,从而实现开发者自己的类型转换器,完成字符串和自定义符合类型之间的转换。
Struts2中有内建的类型转换器和自定义类型转换器以及集合类型转换器,这里我主要介绍集合类型转换器,
有些时候我们需要再页面上批量输入一些数据时,这是就需要使用集合类型的转换器功能来完成对集合的类型转换,
比如set和list类型。
下面使用list
register.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<style>
.content {
font-size: 12px;
}
#search_botton {
border: 1px solid #8CC6FF;
color: #0066CC;
padding: 1px 1px;
background-color: #f1f9ff;
}
</style>
</head>
<body>
<s:form action="registerAction" method="post">
<table border="0" class="content">
<tr>
<td>please select the bobby</td>
</tr>
<tr>
<td><s:checkboxlist name="hobby"
list="{‘reading‘,‘dancing‘,‘swimming‘,‘singing‘}" value="{‘reading‘,‘swimming‘}"/></td>
</tr>
<tr>
<td><s:submit
value="提交" id="search_botton"></s:submit></td>
</tr>
</table>
</s:form>
</body>
</html>
test-conversion.properties文件内容
#注册全局转换器
#文件名必须是xxx-conversion.properties格式
#此文件必须放在根目录下,即src下与struts.xml文件同级,以便所有的Action都能够使用
#文件内容必须是转换的类名的全路径=具体转换器路径
wzl.Struts2.domain.Hobby=wzl.Struts2.converter.RegisterConverter
RegisterAction类
package wzl.Struts2.action;
import java.util.List;
import com.opensymphony.xwork2.ActionSupport;
public class registerAction extends ActionSupport {
private List hobby;
public List getHobby() {
return hobby;
}
public void setHobby(List hobby) {
this.hobby = hobby;
}
@Override
public String execute() throws Exception {
return SUCCESS;
}
}
bobby类
package wzl.Struts2.domain;
public class Hobby {
private String bobby;
public Hobby() {
super();
// TODO Auto-generated constructor stub
}
public String getBobby() {
return bobby;
}
public void setBobby(String bobby) {
this.bobby = bobby;
}
}
RegisterConverter类(此类主要讲register.jsp页面中用户选择的爱好存储到List容器里负责类型转换器)
package wzl.Struts2.converter.RegisterConverter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
import wzl.Struts2.domain.Hobby;
public class RegisterConverter extends StrutsTypeConverter{
@Override
public Object convertFromString(Map arg0, String[] arg1, Class arg2) {
List list = new ArrayList();
for(int i=0;i<arg1.length;i++){
Hobby hobby = new Hobby();
String str= arg1[i];
hobby.setBobby(str);
list.add(hobby);
}
return list;
}
@Override
public String convertToString(Map arg0, Object arg1) {
List list =new ArrayList();
StringBuffer result = new StringBuffer();
for (int i = 0; i < list.size(); i++) {
Hobby h = (Hobby) list.get(i);
result.append(h.getBobby()+"");
}
return result.toString();
}
}
showRegister.jsp页面(显示用户选择的爱好)
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<style>
.content {
font-size: 12px;
}
</style>
</head>
<body>
<table class="content">
<tr>
<td>
your selected is:
</td>
</tr>
<s:iterator value="#request.hobby" var="v">
<tr>
<td><s:property></s:property></td>
</tr>
</s:iterator>
</table>
</body>
</html>