实现的目标,将页面中的字符转为对象,如Larry;123456 转为 User对象,username为Larry,password为123456。
如何实现:
Struts的类型转换,对于8个原生数据类型以及Date,String等常见类型,
Struts2可以使用内建的类型转换器实现自动转换;但对于自定义的对象
来说,就需要我们自己指定类型转换的方式了。
工程用到的文件如下图所示

1、创建测试页面test.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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>Insert title here</title>
</head>
<body>
<h1>使用分号隔开用户名和密码</h1>
<form action="userAction">
user info: <input type="text" name="user"> <br>
<input type="submit" value="submit">
</form>
</body>
</html>
2、创建userAction
public class UserAction extends ActionSupport {
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public String execute() throws Exception {
System.out.println("username:" + user.getUsername());
System.out.println("password:" + user.getPassword());
return SUCCESS;
}
}
输出用户名和密码
3、在struts.xml中添加配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<!-- 是否开启动态方法调用 -->
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<package name="default" namespace="/" extends="struts-default">
<action name="login" class="com.example.struts2.LoginAction" method="login">
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
<result name="result">/result.jsp</result>
</action>
<action name="helloworld" class="com.example.struts2.HelloWorldAction">
<result name="success">/success.jsp</result>
<result name="result">/result.jsp</result>
</action>
<action name="userAction" class="com.example.struts2.UserAction">
<result name="success">/output.jsp</result>
</action>
</package>
</struts>
output.jsp文件如下:
<%@ page language="java" contentType="text/html;charset=UTF-8"
pageEncoding="UTF-8"%>
<!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>Insert title here</title>
</head>
<body>
username: ${requestScope.username } <br>
password: ${requestScope.password }
</body>
</html>
4、创建转换器
public class UserConverter extends DefaultTypeConverter {
@Override
public Object convertValue(Map<String, Object> context, Object value, Class toType) {
if(User.class == toType){ //从页面向后台对象转换
String[] str = (String[])value;
String firstValue = str[0];
StringTokenizer st = new StringTokenizer(firstValue,";");
String username = st.nextToken();
String password = st.nextToken();
User user = new User();
user.setUsername(username);
user.setPassword(password);
return user;
}
return null;
}
}
并且增加配置文件UserAction-conversion.properties
内容为:user=com.example.converter.UserConverter
位于UserAction中的user变量使用com.example.converter.UserConverter转换器
5、测试
打开test.jsp

然后点击提交
控制台输出如下

原文:https://www.cnblogs.com/linlf03/p/11519798.html