局部类型转换器 :
1)局部类型转换器仅仅对某个Action的属性起作用
2)properties文件名对应于Action类名,而且格式为 'Action类名-conversion.properties',
文件必须和Action类处于同一个包下,properties文件内容格式为:属性名=对应转换封装类路径。
全局类型转换器:
1)全部类型转换器对所有Action的特定类型的属性都会生效。
2)properties文件名固定’xwork-conversion.properties‘,
文件处于src目录下,properties文件 内容格式为:类名名=对应转换封装类路径。
实例:
编辑环境: myeclipse10+struts2.2.1
局部类型转换器实现:
1)建3个jsp
index.jsp
<%@ page language="java" contentType="text/html; charset=GBK"%>
<html>
<head>
<title>局部类型转换器</title>
</head>
<body>
<form action="abc.action" method="post">
<table align="center" width="360">
<caption><h3>局部类型转换器</h3></caption>
<tr align="center">
<td>用户信息的用户名和密码以英文逗号隔开</td>
</tr>
<tr>
<td>请输入用户信息:<input type="text" name="user"/></td>
</tr>
<tr align="center">
<td><input type="submit" value="转换"/><input type="reset" value="重填" /></td>
</tr>
</table>
</form>
</body>
</html>
welcome.jsp
<%@ page language="java" contentType="text/html; charset=GBK"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>转换成功</title>
</head>
<body>
转换成功!<br>
用户名为:<s:property value="user.name"/><br>
密码为:<s:property value="user.pass"/><br>
</body>
</html>
error.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
不合法,无法转换. <br>
</body>
</html>
2) 修改web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
3)创建类:LoginAction.java User.java UserConverter.java
package jk;
import com.opensymphony.xwork2.Action;
/**
* @author love_jk
* <br>Date: 2014-02-15
*/
public class LoginAction implements Action
{
private User user;
private String tip;
public void setUser(User user)
{
this.user = user;
}
public void setTip(String tip)
{
this.tip = tip;
}
public User getUser()
{
return (this.user);
}
public String getTip()
{
return (this.tip);
}
public String execute() throws Exception
{
if (getUser().getName().equals("admin")
&& getUser().getPass().equals("123") )
{
setTip("转换成功");
return SUCCESS;
}
else
{
setTip("转换失败");
return ERROR;
}
}
}
package jk;
/**
* @author love_jk
* <br>Date: 2014-02-15
*/
public class User
{
private String name;
private String pass;
public void setName(String name)
{
this.name = name;
}
public void setPass(String pass)
{
this.pass = pass;
}
public String getName()
{
return (this.name);
}
public String getPass()
{
return (this.pass);
}
}
package jk;
import java.util.Map;
import ognl.DefaultTypeConverter;
/**
* @author love_jk
* <br>Date: 2014-02-15
*/
public class UserConverter extends DefaultTypeConverter
{
public Object convertValue(Map context, Object value, Class toType)
{
if (toType == User.class )
{
String[] params = (String[])value;
User user = new User();
String[] userValues = params[0].split(",");
user.setName(userValues[0]);
user.setPass(userValues[1]);
return user;
}
else if (toType == String.class )
{
User user = (User) value;
return "<" + user.getName() + "," + user.getPass() + ">";
}
return null ;
}
}
4) 创建LoginAction-conversion.properties
user=jk.UserConverter
5) 编辑struts.xml 文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="jk" extends="struts-default">
<action name="abc" class="jk.LoginAction">
<result name="success">/welcome.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
</struts>
--------------------------------------------------------------------------
全部类型转换器实现:
1)建3个jsp
index.jsp
<%@ page language="java" contentType="text/html; charset=GBK"%>
<html>
<head>
<title>全局类型转换器</title>
</head>
<body>
<form action="abc.action" method="post">
<table align="center" width="360">
<caption><h3>全局类型转换器</h3></caption>
<tr align="center">
<td>用户信息的用户名和密码以英文逗号隔开</td>
</tr>
<tr>
<td>请输入用户信息:<input type="text" name="user"/></td>
</tr>
<tr>
<td>请输入客人信息:<input type="text" name="customer"/></td>
</tr>
<tr>
<td>用户生日:<input type="text" name="birth"/></td>
</tr>
<tr align="center">
<td><input type="submit" value="转换"/><input type="reset" value="重填"/></td>
</tr>
</table>
</form>
</body>
</html>
welcome.jsp
<%@ page language="java" contentType="text/html; charset=GBK"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>转换成功</title>
</head>
<body>
转换成功!<br>
用户的用户名为:<s:property value="user.name"/><br>
用户的密码为:<s:property value="user.pass"/><br>
用户的生日为:<s:property value="birth"/><br>
客人的用户名为:<s:property value="customer.name"/><br>
客人的密码为:<s:property value="customer.pass"/><br>
</body>
</html>
error.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
不合法,无法转换. <br>
</body>
</html>
2) 修改web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
3)创建类:LoginAction.java User.java UserConverter.java
package jk;
import com.opensymphony.xwork2.Action;
import java.util.Date;
/**
* @author love_jk
* <br>Date: 2014-02-15
*/
public class LoginAction implements Action
{
private User user;
private User customer;
private Date birth;
private String tip;
public void setUser(User user)
{
this.user = user;
}
public void setCustomer(User customer)
{
this.customer = customer;
}
public void setTip(String tip)
{
this.tip = tip;
}
public void setBirth(Date d)
{
this.birth = d;
}
public User getUser()
{
return (this.user);
}
public User getCustomer()
{
return (this.customer);
}
public Date getBirth()
{
return this.birth;
}
public String getTip()
{
return (this.tip);
}
public String execute() throws Exception
{
if (getUser().getName().equals("admin")
&& getUser().getPass().equals("123") )
{
setTip("转换成功");
return SUCCESS;
}
else
{
setTip("转换失败");
return ERROR;
}
}
}
package jk;
/**
* @author love_jk
* <br>Date: 2014-02-15
*/
public class User
{
private String name;
private String pass;
public void setName(String name)
{
this.name = name;
}
public void setPass(String pass)
{
this.pass = pass;
}
public String getName()
{
return (this.name);
}
public String getPass()
{
return (this.pass);
}
}
package jk;
import java.util.Map;
import ognl.DefaultTypeConverter;
import org.apache.struts2.util.StrutsTypeConverter;
import java.util.List;
import java.util.ArrayList;
/**
* @author love_jk
* <br>Date: 2014-02-15
*/
public class UserConverter extends StrutsTypeConverter
{
public Object convertFromString(Map context, String[] values, Class toClass)
{
User user = new User();
String[] userValues = values[0].split(",");
user.setName(userValues[0]);
user.setPass(userValues[1]);
return user;
}
@Override
public String convertToString(Map context, Object o)
{
User user = (User)o;
return "<" + user.getName() + "," + user.getPass() + ">";
}
}
4) 创建xwork-conversion.properties
jk.User=jk.UserConverter
5) 编辑struts.xml 文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="jk" extends="struts-default">
<action name="abc" class="jk.LoginAction">
<result name="success">/welcome.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
</struts>