Struts2参数和类型转换

来源:互联网 发布:淘宝水果卖点怎么写 编辑:程序博客网 时间:2024/06/04 17:45

一、接收请求参数

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

#listElement_usersss=model.User#MapKey_userssss=java.lang.StringElement_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 {@Overridepublic 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 {@Overridepublic 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;}  @Overridepublic String convertToString(Map arg0, Object value) {User user = (User) value;return "<" + user.getName() + "," + user.getPass() + ">";}}



注意:局部对Action的指定进行转换,只装换一次。全局类型对每个元素进行转换。

0 0
原创粉丝点击