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