struts2(3)----------struts2参数接收

第一种:用request接收数据

在servlet中 可以用request.getParameter(),同样在struts2也可以这样接收,但需要获取request对象和response对象

    HttpServletRequest request = ServletActionContext.getRequest();

    HttpServletResponse response = ServletActionContext.getResponse();

第二种:用定义成员变量,提供get/set方法

1、零散类型数据

    直接在action中声明接收的成员变量,并为成员变量提供公开的get/set方法

    注意:name属性值要与Action中接收的成员变量一致,地址栏中?后面的参数也需要保持一致

2、对象类型数据

    同1,直接将接收的对象声明为成员变量,并提供公开的get/set方法

    注意:表单中的name属性要必须为成员变量名.属性名,地址栏中?后面的参数也一样

3、数组和集合类型数据

    同上,直接将接收的数组/集合声明为成员变量,并提供公开的get/set方法

    注意:表单中多个name属性与action中声明的数据/集合变量名一致才可以放在一个数组集合中

               地址栏?后面的参数的多个key也必须与action中声明的数组集合名一致

例子如下:

login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>
  	<title>login</title>
  <body>
    <form action="${pageContext.request.contextPath}/user/login" method="post">
    	用户名:<input type="text" name="username"/><br/>
    	密码:<input type="text" name="password"/><br/>
    	<input type="submit" value="登陆" />
    </form>
    <a href="regist.jsp">注册</a>
  </body>
</html>

UserAction.java

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.struts2.ServletActionContext;

import com.baizhi.entity.User;
import com.baizhi.service.UserService;
import com.baizhi.service.impl.UserServiceImpl;
import com.baizhi.util.DateUtil;
import com.baizhi.util.DateXingZuoUtil;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport{
	private String username;
	private String password;
	private Date birthday;
	private User user;
	

	public Date getBirthday() {
		return birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}

	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	//处理user的login控制代码
	public String login(){
		UserService us = new UserServiceImpl();
		//第一种方式接受参数	(零散型接收)
		User user = us.loign(username, password);
		if(user!=null){
			ServletActionContext.getRequest().getSession().setAttribute("user", user);
			return Action.SUCCESS;
		}else{
			return Action.ERROR;
		}
	}
}
说明:HttpServletRequest request = ServletAction.Context.getRequest();
上述例子可以改为
login.jsp
标红处:改为user.username   user.password


UserAction.java
定义private User user;并提供get/set方法
标红处可以改为:user.getUsername(),user.getPassword()

三、可以利用值栈处理参数接收问题

值栈的内存结构:


值栈分为root区和contextMap区:

    root区中存的是当前请求的action对象和标签处理的临时结果;

    contextMap区中:有默认的request、session、application

值栈:用来管理和操作一次请求所涉及的数据

         什么是一次请求涉及的数据?1、作用域中的数据    2、请求参数

首先,获取值栈:ActionContext context = ActionContext.getContext();

                            ValueStack vs = context.getValueStack();

    操作值栈:存值   vs.setValue(“OGNL表达式”, Object);

                     取值   vs.findValue("OGNL表达式");

    通过值栈设置request作用域:vs.setValue("#request.key",value);            取值vs.findValue("#request.key");

    通过值栈设置session作用域:vs.setValue("#session.key",value);             取值vs.findValue("#session.key");

    通过值栈设置request作用域:vs.setValue("#application.key",value);      取值vs.findValue("#application.key");

    通过值栈接收请求参数(?name=sqc&name=hz)                                取值vs.findValue("#parameter['name'][0]");      

在页面取值用Struts2提供的标签






猜你喜欢

转载自blog.csdn.net/qq_36115651/article/details/80170843