实现如下:
1、index.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib prefix = "s" uri = "/struts-tags"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <s:form action = "login" method = "get"> <s:textfield name = "user" label = "用户名及密码1"></s:textfield> <s:textfield name = "user" label = "用户名及密码2"></s:textfield> <s:textfield name = "user" label = "用户名及密码3"></s:textfield> <s:submit value = "提交"></s:submit> </s:form> </body> </html>javabean: package com.action; import com.bean.User; import com.opensymphony.xwork2.ActionSupport; public class LoginAction extends ActionSupport{ private User[] user; public String execute() { return SUCCESS; } public User[] getUser() { return user; } public void setUser(User[] user) { this.user = user; } } LoginAction.java package com.action; import com.bean.User; import com.opensymphony.xwork2.ActionSupport; public class LoginAction extends ActionSupport{ private User[] user; public String execute() { return SUCCESS; } public User[] getUser() { return user; } public void setUser(User[] user) { this.user = user; } } 类型转换器: package com.converter; import java.util.Map; import org.apache.struts2.util.StrutsTypeConverter; import com.bean.User; import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter; public class UserConverter extends StrutsTypeConverter{ @Override public Object convertFromString(Map context, String[] values, Class toClass) { User[] users = new User[values.length]; for (int i = 0; i < values.length; i++) { String[] userValue = values[i].split(","); users[i] = new User(); //必须new对象! users[i].setUsername(userValue[0]); users[i].setPassword(userValue[1]); } return users; } @Override public String convertToString(Map context, Object values) { if(values instanceof User[]){ User[] users = (User[])values; String reStr = ""; for (int i = 0; i < users.length; i++) { reStr += "用户名:"+users[i].getUsername()+" 密码:"+users[i].getPassword()+"\n"; } return reStr; } else return null; } } LoginAction-conversion.properties文件: user=com.converter.UserConverter ok.jsp页面: <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib prefix = "s" uri = "/struts-tags" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'ok.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <s:debug/> <s:property value = "user"/> </body> </html> 深刻反思!
很简单的类型转换却找了很久的bug! 究其原因出在了对象数组身上。
二:集合类型转换器
package com.converter; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.apache.struts2.util.StrutsTypeConverter; import com.bean.User; import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter; public class UserConverter extends StrutsTypeConverter{ @Override public Object convertFromString(Map context, String[] values, Class toClass) { List<User> users = new ArrayList<User>(); for (int i = 0; i < values.length; i++) { String[] userValue = values[i].split(","); User user = new User(); user.setUsername(userValue[0]); user.setPassword(userValue[1]); users.add(user); } return users; } @Override public String convertToString(Map context, Object values) { if(values instanceof List){ List<User> users = (List<User>)values; String reStr = ""; for (int i = 0; i < users.size(); i++) { reStr += "用户名:"+users.get(i).getUsername()+" 密码:"+users.get(i).getPassword()+"\n"; } return reStr; } else return null; } }
