struts2入门教程二(接收参数)

Struts2接收请求参数

一:采用基本类型接收请求参数

LoginAction.java

 代码:

 

 private String name;
   private String pass;
 
   public String Login() {
 
      if (name.equals("csdn") && pass.equals("csdn")) {
         return SUCCESS;
      }
      return INPUT;
   }
 
   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;
   }
 
}
 

 

 

login.jsp

代码:

<%@ page language="java"import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags"prefix="s"%>
 
<html>
<head>
 
 
<title>My JSP'login.jsp.jsp' starting page</title>
 
 
</head>
 
<body>
   <s:form action="/hello/login" method="post">
     
         <s:textfield name="name" label="用户名" />
      <s:password name="pass" label="密码" />
      <s:submit />
   </s:form>
</body>
</html>
 

 

index.jsp

 

 代码:

<%@ page language="java"import="java.util.*" pageEncoding="UTF-8"%>
 
<%@ taglib uri="/struts-tags"prefix="s"%>
 
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN">
<html>
 <head>
  
   
   <title>My JSP 'index.jsp' starting page</title>
 
 </head>
 
 <body>
 
  <s:property value="name"/>
 </body>
</html>


 

Struts.xml

代码:

<?xml version="1.0"encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
   "-//Apache Software Foundation//DTD StrutsConfiguration 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>
 


 

 登录效果图:

 

二:采用复合类型接收参数

LoginAction.java

 代码:

package action;
import model.User;
 
importcom.opensymphony.xwork2.ActionSupport;
 
public class LoginAction extendsActionSupport {
 
         /**
          *
          */
         privatestatic final long serialVersionUID = 1L;
 
         //引用类型---对象
         privateUser user;
        
        
         publicString Login() {
                  
                   if(user.getName().equals("csdn") &&user.getPass().equals("csdn")) {
                            returnSUCCESS;
                   }
                   returnINPUT;
         }
 
         publicUser getUser() {
                   returnuser;
         }
 
         publicvoid setUser(User user) {
                   this.user= user;
         }
}


User.java

 

  代码

package model;

 

public classUser {

  

   private Stringname;

   private Stringpass;

   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;

   }

  

 

}

 

 

login.jsp 代码

替换成如下

<s:textfieldname="user.name" label="用户名" />
      <s:passwordname="user.pass" label="密码" />

<s:textfieldname="user.name" label=" 用户名 " />

      <s:passwordname="user.pass" label="密码" />

index.jsp   代码

替换如下

<s:property value="user.name"/>

< s:property value= "user.name" />

其余不变

运行效果及方法 同上

 

 

 

三:采用map集合接收参数

LoginAction.java

 

修改如下

 

package action;
 
import java.util.Map;
 
import model.User;
 
importcom.opensymphony.xwork2.ActionSupport;
 
public class LoginAction extendsActionSupport {
 
          /**
          *
          */
          private static final long serialVersionUID =1L;
        
          // 3.map
          private Map<String, User> users;
        
          public String Login() {
          // map
          
          if(users.get("one").getName().equals("csdn")&&
          users.get("one").getPass().equals("csdn")){ returnSUCCESS; }
        
                    return INPUT;
          }
        
          public Map<String, User> getUsers() {
          return users;
          }
        
          public void setUsers(Map<String, User>users) {
          this.users = users;
          }
 
}


login.jsp

 

修改如下


<!--  这是 map -->
		<s:textfield name="users['one'].name" label="用户名" />
		<s:password name="users['one'].pass" label="密码" />


 

index.jsp

 

<!--  map  泛型  -->
    <s:property value="users['one'].name"/>

  效果及运行访问方式同上

 

 

四:采用list集合接收参数

 

ListAction.java

  修改如下

package action;
 
import java.util.List;
import java.util.Map;
 
import model.User;
 
importcom.opensymphony.xwork2.ActionSupport;
 
public class LoginAction extendsActionSupport {
 
         /**
          *
          */
         privatestatic final long serialVersionUID = 1L;
          // list
          private List<User> userss;
 
 
         publicString Login() {
 
                   //list
                  
                    if(userss.get(0).getName().equals("csdn")&&
                    userss.get(0).getPass().equals("csdn")){return SUCCESS; }
                  
 
                            return INPUT;
         }
          public List<User> getUserss() {
          return userss;
          }
        
          public void setUserss(List<User> userss){
          this.userss = userss;
          }
}


 

login.jsp

  修改如下

 

<!--list  的  -->
 <s:textfield name="userss[0].name" label="用户名"/>
      <s:password name="userss[0].pass" label="密码"/>


 

 

index.jsp 

修改如下

 

<!-- list -->
 <s:property value="userss[0].name"/>

 

   效果及运行方式同上

 

五:采用无泛型的集合接收参数

 

 

Map:Map<String,User>users

List:List users:指定集合类型,ActionName-conversion.properties,Element_<ListPropName>=<ElementType>,

Map类型:需要同时指定key和value

¤  Key_<MapPropName>=<KeyType>

¤  Element_<MapPropName>=<ValueType>

  在action 类的 目录下 配置properties  文件

 此案例 命名为LoginAction-conversion.properties

 

  一: list  无泛型

 

LoginAction.java

 

packageaction;
 
importjava.util.List;
importjava.util.Map;
 
importmodel.User;
 
importcom.opensymphony.xwork2.ActionSupport;
 
publicclass LoginAction extends ActionSupport {
 
   /**
    *
    */
   private static final long serialVersionUID =1L;
 
    // 无泛型--list
    private List usersss;
 
   public String Login() {
 
      // 无泛型的需要加载 properties 配置文件
 
     
       User user = (User) usersss.get(0); if (((User)
       usersss.get(0)).getName().equals("csdn")&& ((User)
       usersss.get(0)).getPass().equals("csdn")){ return SUCCESS; }
     
      returnINPUT;
   } 
    publicList getUsersss() {
    returnusersss;
    }
  
    publicvoid setUsersss(List usersss) {
    this.usersss = usersss;
    }
}


 

login.jsp

 

 

<!--  无泛型的    list -->
        <s:textfield name="usersss[0].name"label="用户名"/>
      <s:password name="usersss[0].pass"label="密码"/>

 

index.jsp

 代码修改如下

 <!-- 无泛型的 list -->
   <s:property value="usersss[0].name"/>


 

 

 

LoginAction-conversion.properties  文件

 

修改如下

Element_usersss=model.User


 

 

 效果图及运行方式同上

 

 

  二: map 无泛型

 

 

LoginAction.java

package action;
 
import java.util.List;
import java.util.Map;
 
import model.User;
 
importcom.opensymphony.xwork2.ActionSupport;
 
public class LoginAction extendsActionSupport {
 
         /**
          *
          */
         privatestatic final long serialVersionUID = 1L;
 
         //无泛型---map
         privateMap userssss;
 
         publicString Login() {
         //map 无泛型
                   if(((User) userssss.get("one")).getName().equals("csdn")
                                     &&((User) userssss.get("one")).getPass().equals("csdn")) {
                            returnSUCCESS;
                   }
 
                   //无 泛型的 需要加载 properties 配置文件
 
                   returnINPUT;
         }
 
         publicMap getUserssss() {
                   returnuserssss;
         }
 
         publicvoid setUserssss(Map userssss) {
                   this.userssss= userssss;
         }
        
}
 


login.jsp

 

修改如下

<!--  这是 map    无泛型 -->
      <s:textfield name="userssss['one'].name" label="用户名" />
      <s:password name="userssss['one'].pass" label="密码" />


Index.jsp

  修改如下:

<!--  map  无泛型  -->
  <s:property value="userssss['one'].name"/> 


 

 

LoginAction-conversion.properties   文件

Key_userssss=java.lang.String
Element_userssss=model.User

 

六: 自定义转换器

String的属性可以接收格式为abc,xyz的请求参数值,我们必须定义类型转换器,否则struts2无法自动完成类型转换。

LoginConverter.java

 

 

package util;
 
import java.util.Map;
 
import model.User;
 
import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;
 
public classLoginConverter extends DefaultTypeConverter {
 
   @Override
   public ObjectconvertValue(Map<String, Object> context, Object value,
         ClasstoType){
     
      // 当需要将字符串向User类型转换时
            if (toType == User.class) {
                // 系统的请求参数是一个字符串数组
                String[]params = (String[]) value;
                // 创建一个User实例
                Useruser = newUser();
                // 只处理请求参数数组第一个数组元素,
                // 并将该字符串以英文逗号分割成两个字符串
                String[]userValues = params[0].split(",");
                // 为User实例赋值
                user.setName(userValues[0]);
                user.setPass(userValues[1]);
                // 返回转换来的User实例
                return user;
            }elseif(toType == String.class) {
                // 将需要转换的值强制类型转换为User实例
               User user = (User) value;
                return "<" + user.getName()+ ","+ user.getPass() + ">";
            }
            return null;
 
   }
 
}
 


login.jsp

 

代码:

<!--  自定义字符串类型 -->
      <s:textfield name="userInfo" label="用户信息" />


Index.jsp

  代码:

 

<!-- 自定义类型 -->
  <s:property value="userInfo.name"/>

 

LoginAction-conversion.properties   文件

 

 修改配置

 指定类型

userInfo=util.LoginConverter


 

 

 以上内容为个人总结,若有个别遗漏错误望大家给予改正。

 大家有一些好的想法或意见,可以相互探讨。

 QQ:897982714

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值