Struts2参数和类型转换(一)

2014-11-24 02:03:48 · 作者: · 浏览: 2

一、接收请求参数

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

  

  

    
   
    Struts Blank
   

    
    
     struts2
     
    
     org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
     
   

    
    
     struts2
     
    
     /*
     
   

   
    
     index.
     jsp
    
   

  

struts.xml

  


  

	
    
     
     
       /index.jsp 
      
     
      /login.jsp
      
     
   

  

3.集合Map 和 List的实现

        private Map
  
    users; 
	
	private List
   
     userss;
   
  


        public Map
  
    getUsers() {
		return users;
	}

	public void setUsers(Map
   
     users) { this.users = users; } public List
    
      getUserss() { return userss; } public void setUserss(List
     
       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" %>






My JSP 'login.jsp' starting page






  

  
     
   
    
   
      
   
    
    
    
   

  




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
< http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PHByZSBjbGFzcz0="brush:java;">#list Element_usersss=model.User #Map Key_userssss=java.lang.String Element_userssss=model.User

login.jsp

  
   
   
    
     
   
    
    
    
   

  

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
  
    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);
	}
	
}

  

  

  
    
   
    
   

  

(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