前台jsp页面
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>局部类型、转换</title>
</head>
<body>
<s:form action="login">
<s:textfield name="user" label="用户"></s:textfield>
<tr>
<td colspan="2"><s:submit value="转换" theme="simple"/>
<s:reset value="重填" theme="simple"/></td>
</tr>
</s:form>
</body>
</html>
Action的处理
package example.LocalConver;
import com.opensymphony.xwork2.ActionSupport;
import example.domain.User;
public class LoginAction extends ActionSupport{
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public String execute() throws Exception {
if(getUser().getName().equals("zhangsan")&&getUser().getPass().equals("123456")){
addActionMessage("登录成功");
return SUCCESS;
}
addActionMessage("登录失败");
return ERROR;
}
}
自定义转换器
定义转换器必须继承DefaultTypeConverter 重写convertValue
package example.LocalConver;
import java.util.Map;
import example.domain.User;
import ognl.DefaultTypeConverter;
public class UserConverter extends DefaultTypeConverter{
/**
* 类型转换器转换 方法必须重写
* **/
@Override
public Object convertValue(Map context, Object value, Class toType) {
// TODO Auto-generated method stub
System.out.println(toType.getName());
System.out.println(value);
String[] str = (String[])value; // 这个value是字符数组不是字符串这个很关键
for(String s:str){
System.out.println(s);
}
System.out.println("Map "+context);
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 = (User) value;
return "<" + user.getName() + ","
+ user.getPass() + ">";
}
return null ;
// return super.convertValue(context, value, toType);
}
}
还需要一个properties的文件
文件命名规则 action的类名-conversion.properiters
//输入字段name = 转换器的路径
user=example.LocalConver.UserConverter
这个配置文件的命名只能对单个action起作用
如果对这个User的bean起作用 那么需要配置
//bean的全路径 = 转换器的路径
example.domain.User=example.LocalConver.UserConverter
struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="example5" namespace="/" extends="struts-default">
<action name="login" class="example.LocalConver.LoginAction">
<result>/content/out.jsp</result>
<result name="error">/content/out.jsp</result>
</action>
</package>
</struts>