类型转换分两类
1 局部类型转换
1.1 普通Action中的类型转换
配置文件存放目录:Action同级目录;
配置文件名:Action名-conversion.properties文件
转换器:自定义转换器实现TypeConverter接口,可以直接继承StrutsTypeConverter来实现;
内容:Action属性名=转换器包路径
1.2 基于模型驱动的类型转换
配置文件存放目录:模型同级目录;
配置文件名:模型名-conversion.properties文件
转换器:自定义转换器实现TypeConverter接口,可以直接继承StrutsTypeConverter来实现;
内容:模型属性名=转换器包路径
2 全局类型转换
配置文件存放目录:项目根目录;
配置文件名:work-conversion.properties文件
转换器:自定义转换器实现TypeConverter接口,可以直接继承StrutsTypeConverter来实现;
内容:要转换的类型包路径=转换器包路径
注意:若在模型驱动情况下,即配置了Action的类型转换器又配置了对应模型的转换器,此时只会选择模型转换器;
3 示例
3.1 模型驱动情况示例
[TestAction.java]
package com.struts2.demo;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.struts2.demo.bean.TestBean;
public class TestAction extends ActionSupport implements
ModelDriven{
private static final long serialVersionUID =
-3557249908855957132L;
private TestBean bean = new TestBean();
public TestBean getBean() {
return bean;
}
public void setBean(TestBean bean) {
this.bean = bean;
}
public String input() throws Exception {
return "input";
}
public String execute() throws Exception {
return "success";
}
public TestBean getModel() {
return this.bean;
}
}
[TestBean.java]
package com.struts2.demo.bean;
import java.math.BigDecimal;
import java.util.Date;
public class TestBean {
private String str;
private BigDecimal num;
private BigDecimal[] numArray;
private Date date;
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
public BigDecimal getNum() {
return num;
}
public void setNum(BigDecimal num) {
this.num = num;
}
public BigDecimal[] getNumArray() {
return numArray;
}
public void setNumArray(BigDecimal[] numArray)
{
this.numArray = numArray;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
}
[DateTypeConverter.java]
package com.struts2.demo;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
public class DateTypeConverter extends StrutsTypeConverter
{
//
Ognl默认会转换yyyy-MM-dd格式的日期;这里测试使用yyyyMMdd格式;
private static final SimpleDateFormat
DEFAULT_FORMAT = new SimpleDateFormat("yyyyMMdd");
@Override
public Object convertFromString(Map context,
String[] values, Class toClass) {
if (values[0] == null ||
"".equals(values[0])) {
return
null;
}
Date result = null;
try {
if
(toClass.equals(Date.class)) {
result
= DEFAULT_FORMAT.parse(values[0]);
}
} catch (ParseException e)
{
e.printStackTrace();
}
return result;
}
@Override
public String convertToString(Map context, Object
o) {
String result = "";
if (o != null) {
result =
DEFAULT_FORMAT.format(o);
}
return result;
}
}
[demo.xml] include进struts.xml中;
<?xml version="1.0" encoding="UTF-8"
?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration
2.0//EN"
"http://struts./dtds/struts-2.0.dtd">
<struts>
<package name="demo" namespace="/demo"
extends="default">
<action name="test_*"
class="com.struts2.demo.TestAction"
method="{1}">
<result
name="input">/WEB-INF/page/demo/input.jsp</result>
<result
name="success">/WEB-INF/page/demo/result.jsp</result>
</action>
</package>
</struts>
[input.jsp]
<%@ page contentType="text/html;charset=UTF-8"
language="java" %>
<%@ taglib prefix="s" uri="/struts-tags"
%>
<html>
<head><title>demo
input</title></head>
<body>
<s:form namespace="/demo" action="test"
method="post">
str:
<s:textfield name="str"
/><br/>
num:
<s:textfield name="num"
/><br/>
numArray:
<s:textfield name="numArray"
value="%{numArray[0]}"/><s:textfield
name="numArray"
value="%{numArray[1]}"/><br/>
date:
<s:textfield name="date"
/><br/>
<s:submit
value="提交"></s:submit>
</s:form>
</body>
</html>
[result.jsp]
<%@ page contentType="text/html;charset=UTF-8"
language="java" %>
<%@ taglib prefix="s" uri="/struts-tags"
%>
<html>
<head><title>demo
result</title></head>
<body>
str:
<s:property
value="bean.str"/><br/>
num:
<s:property
value="bean.num"/><br/>
numArray:
<s:iterator
value="bean.numArray">
<s:property
/>
</s:iterator><br/>
date:
<s:property
value="bean.date"/><br/>
</body>
</html>
[TestBean-conversion.properties]
date=com.struts2.demo.DateTypeConverter
3.2 全局类型转换器
将以上配置文件“TestBean-conversion.properties”改名为“xwork-conversion.properties”,内容改为“java.util.Date=com.struts2.demo.DateTypeConverter”;
然后,将文件移动到项目源文件夹src下面;
以上测试通过!
|