Struts2参数和类型转换

一、接收请求参数

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的指定进行转换,只装换一次。全局类型对每个元素进行转换。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值