您的位置:首页 > 编程语言 > Java开发

Struts2参数和类型转换

2014-03-01 20:11 411 查看
一、接收请求参数

1.采用基本类型接收请求参数(get/post)

public class UserAction {
private Integer id;
public void setId(Integer id) {//struts2通过反射技术调用与请求参数同名的属性的setter方法来获取请求参数值
this.id = id;
}
public Integer getId() {return id;}
}

2.采用自定义类型接收请求参数

User.java

package model;

public class User {
private String name;
private String pass;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}

}


package action;

import java.util.List;
import java.util.Map;

import model.User;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport {
private User user;
public User getUser() {
return user;
}

public void setUser(User user) {
this.user = user;
}//Struts2首先通过反射技术调用Product的默认构造器创建product对象,然后再通过反射技术调用product中与请求参数同名的属性的setter方法来获取请求参数值。
public String Login(){if(user.getName().equals("csdn")&&user.getPass().equals("csdn")){
return SUCCESS;
}return INPUT;
}
}
在web.xml中配置struts2

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Struts Blank</display-name>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list>
</web-app>

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="hello" namespace="/hello" extends="struts-default">
<action name="login" class="action.LoginAction" method="Login">
<result name="success">
/index.jsp
</result>
<result name="input">/login.jsp</result>
</action>
</package>
</struts>


3.集合Map 和 List的实现
private Map<String,User> users;

private List<User> userss;

public Map<String, User> getUsers() {
return users;
}

public void setUsers(Map<String, User> users) {
this.users = users;
}

public List<User> getUserss() {
return userss;
}

public void setUserss(List<User> userss) {
this.userss = userss;
}
public String Login() {
if(users.get("one").getName().equals("csdn")&&users.get("one").getPass
().equals("csdn")){ return SUCCESS; }
if(userss.get(0).getName().equals("csdn")&&userss.get(0).getPass().equals
("11")){ return SUCCESS; }
return INPUT;
}


login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title>My JSP 'login.jsp' starting page</title>

</head>

<body>
<!-- struts2标签 -->
<s:form action="/hello/login" method="post">
<s:textfield name="users['one'].name" label="用户名"/>
<s:password name="users['one'].pass" label="密码 "/>
<s:textfield name="userss[0].name" label="用户名"/>
<s:password name="userss[0].pass" label="密码"/>
<s:submit/>
</s:form>
</body>
</html>


4.List和Map无泛型的实现登陆
private List usersss;

private Map userssss;
public List getUsersss() {
return usersss;
}

public void setUsersss(List usersss) {
this.usersss = usersss;
}

public Map getUserssss() {
return userssss;
}

public void setUserssss(Map userssss) {
this.userssss = userssss;
}
public String Login() {
User user=(User) usersss.get(0);//强制转化
if(user.getName().equals("csdn")&&user.getPass().equals("11")){
return SUCCESS; }
if(((User) userssss.get("one")).getName().equals("13")&&((User)
userssss.get("one")).getPass().equals("123")){ return SUCCESS; }

return INPUT;
}




LoginAction-conversion.properties

#list
Element_usersss=model.User
#Map
Key_userssss=java.lang.String
Element_userssss=model.User

login.jsp
<s:form action="/hello/login" method="post">
<s:textfield name="usersss[0].name" label="用户名"/>
<s:password name="usersss[0].pass" label="密码"/> <s:textfield name="userssss['one'].name" label="用户名"/>
<s:password name="userssss['one'].pass" label="密码"/>
<s:submit/>
</s:form>

5.自定义类型转换
(1)局部类型转换器

private User userinfo;

public User getUserinfo() {
return userinfo;
}

public void setUserinfo(User userinfo) {
this.userinfo = userinfo;}
public String Login() {
System.out.println(userinfo.getName() + "---" + userinfo.getPass());
if (userinfo.getName().equals("13") && userinfo.getPass().equals("123")) {
return SUCCESS;
}
return INPUT;
}

LoginAction-conversion.properties
userinfo=util.DateConverter

DateConverter.java
package util;

import java.util.Map;

import model.User;

import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;

public class DateConverter extends DefaultTypeConverter {

@Override
public Object convertValue(Map<String, Object> context, Object value,
Class toType) {
if (toType == User.class) {
// 系统的请求参数是一个字符串数组
String[] params = (String[]) value;
// 创建一个User实例
User user = new User();
// 只处理请求参数数组第一个数组元素,
// 并将该字符串以英文逗号分割成两个字符串
String[] userValues = params[0].split(",");
// 为User实例赋值
user.setName(userValues[0]);
user.setPass(userValues[1]);
// 返回转换来的User实例
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);
}

}

<!-- struts2标签 -->
<s:form  action="/hello/login"  method="post">
<s:textfield name="userinfo" label="用户信息"></s:textfield>
<s:submit/>
</s:form>

(2)全局类型转换器

在WEB-INF/classes下放置xwork-conversion.properties文件 。在properties文件中的内容为:

待转换的类型=类型转换器的全类名

对于本例而言, xwork-conversion.properties文件中的内容为:

model.User=util.OSConverter

OSConverter.java

package util;

import java.lang.reflect.Member;
import java.util.Map;

import model.User;

import org.apache.struts2.util.StrutsTypeConverter;

import com.opensymphony.xwork2.conversion.TypeConverter;

public class OSConverter extends StrutsTypeConverter {

@Override
public Object convertFromString(Map arg0, String[] value, Class arg2) {
// TODO Auto-generated method stub
// 系统的请求参数是一个字符串数组
String[] params = (String[]) value;
// 创建一个User实例
User user = new User();
// 只处理请求参数数组第一个数组元素,
// 并将该字符串以英文逗号分割成两个字符串
String[] userValues = params[0].split(",");
// 为User实例赋值
user.setName(userValues[0]);
user.setPass(userValues[1]);
// 返回转换来的User实例
return user;
}

@Override
public String convertToString(Map arg0, Object value) {
User user = (User) value;
return "<" + user.getName() + "," + user.getPass() + ">";
}

}


注意:局部对Action的指定进行转换,只装换一次。全局类型对每个元素进行转换。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: