類(lèi)型轉(zhuǎn)換分兩類(lèi)
1 局部類(lèi)型轉(zhuǎn)換
1.1 普通Action中的類(lèi)型轉(zhuǎn)換
配置文件存放目錄:Action同級(jí)目錄;
配置文件名:Action名-conversion.properties文件
轉(zhuǎn)換器:自定義轉(zhuǎn)換器實(shí)現(xiàn)TypeConverter接口,可以直接繼承StrutsTypeConverter來(lái)實(shí)現(xiàn);
內(nèi)容:Action屬性名=轉(zhuǎn)換器包路徑
1.2 基于模型驅(qū)動(dòng)的類(lèi)型轉(zhuǎn)換
配置文件存放目錄:模型同級(jí)目錄;
配置文件名:模型名-conversion.properties文件
轉(zhuǎn)換器:自定義轉(zhuǎn)換器實(shí)現(xiàn)TypeConverter接口,可以直接繼承StrutsTypeConverter來(lái)實(shí)現(xiàn);
內(nèi)容:模型屬性名=轉(zhuǎn)換器包路徑
2 全局類(lèi)型轉(zhuǎn)換
配置文件存放目錄:項(xiàng)目根目錄;
配置文件名:work-conversion.properties文件
轉(zhuǎn)換器:自定義轉(zhuǎn)換器實(shí)現(xiàn)TypeConverter接口,可以直接繼承StrutsTypeConverter來(lái)實(shí)現(xiàn);
內(nèi)容:要轉(zhuǎn)換的類(lèi)型包路徑=轉(zhuǎn)換器包路徑
注意:若在模型驅(qū)動(dòng)情況下,即配置了Action的類(lèi)型轉(zhuǎn)換器又配置了對(duì)應(yīng)模型的轉(zhuǎn)換器,此時(shí)只會(huì)選擇模型轉(zhuǎn)換器;
3 示例
3.1 模型驅(qū)動(dòng)情況示例
[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默認(rèn)會(huì)轉(zhuǎn)換yyyy-MM-dd格式的日期;這里測(cè)試使用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進(jìn)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 全局類(lèi)型轉(zhuǎn)換器
將以上配置文件“TestBean-conversion.properties”改名為“xwork-conversion.properties”,內(nèi)容改為“java.util.Date=com.struts2.demo.DateTypeConverter”;
然后,將文件移動(dòng)到項(xiàng)目源文件夾src下面;
以上測(cè)試通過(guò)!
|