Struts2 后台数据传输到页面(域对象传值,值栈(狭义值栈和广义值栈))

Struts2  后台数据传输到页面(域对象传值,值栈(狭义值栈和广义值栈))

域对象传值:

 域对象: 范围对象,Action类中获取域对象的方式有IOC方式和非IOC方式,详细细看:http://blog.csdn.net/benxiaohai888/article/details/78374307
        application---ServletContext
        session---HttpSession
        request---HttpServletRequest    
        response--HttpServletResponse

简单的示例:

Action类(LoginAction.java)

package cn.sz.action;

import java.util.Date;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import cn.sz.vo.User;


public class UserAction {
	// 域对象传值方法(非IOC方式)		

	public String insert() {
		//非IOC方式获取域对象
		ServletContext application = ServletActionContext.getServletContext();
		HttpServletRequest request = ServletActionContext.getRequest();
		HttpSession session = ServletActionContext.getRequest().getSession();
		HttpServletResponse response = ServletActionContext.getResponse();
                 //可以取值
		String id = (String) application.getAttribute("id");
		String name = (String) request.getAttribute("name");
		String sessionvalue = (String) session.getAttribute("session");
		System.out.println(id + "," + name + "," + sessionvalue);
                //可以设置值
		application.setAttribute("key", "application");
		session.setAttribute("key", "session");
		request.setAttribute("key", "request");

		return "insert";
	}

}

显示页面(index.jsp):


<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
	<h1>登录成功后的index界面</h1>
	
	<p>EL表达式获取值</P>
	
	${applicationScope.key }
	${requestScope.key }
	${sessionScope.key }
	
</body>
</html>



值栈传值:
       1.什么是值栈?
           是存放value值的内存空间,具备先进后出的特点(FILO  LIFO).
      2. 在struts中有两类值栈,狭义值栈和广义值栈
            广义值栈ActionContext,线程安全,值栈中可以设置在当前请求下的key-value                              
            狭义的值栈ValueStack(接口),OGNLValueStack(实现),狭义值栈实现OGNLValueStack对象,线程安全,存储action中的
            设置了set方法的属性和值,通常用于与OGNL表达式和struts标签结合使用,狭义的值栈属于广义值栈的一部分.                           
            通常意义上,所说的值栈是指广义值栈
   
       3.后台获得值栈
          getContext()---获取广义值栈
          get("request")---获取狭义值栈
          getValueStack()--获取狭义值栈      
          getParameters()---获取url之后的key-value对         
          put()----设置值


       自定义拦截器也可以获取值栈:

public String intercept(ActionInvocation invocation) throws Exception {
		// 这个操作也可以获取广义值栈
			ActionContext ac = invocation.getInvocationContext();
	
		// 如果返回值是null,那么表示此拦截器没有通过;如果返回值不是null,表示可以通过拦截器
		String invoke = invocation.invoke();
		return invoke;
}

    

示例代码:

Action类:

public class LoginAction implements Action{
	

	@Override
	public String execute() throws Exception {
		
		// 演示用于广义值栈和狭义值栈将后台的数据传输到页面
		// 获取广义值栈
		ActionContext ac = ActionContext.getContext();
		//直接将值放在值栈中,页面可以使用OGNL表达式中的 <s:property value="#attr.attr1" /> 获取内容
		ac.put("attr1", "attr");

		// 通过广义值栈获取Session域
		Map<String, Object> session = ac.getSession();
		// 这里演示将一个集合数据推送到值栈
		ArrayList<User> list = new ArrayList<>();
		User u1 = new User(1, "张三");
		User u2 = new User(2, "李四");
		User u3 = new User(3, "王五");
		list.add(u1);
		list.add(u2);
		list.add(u3);
		session.put("users", list);
		// 演示将时间推送到值栈中
		session.put("currentdate", new Date());

		// 可以用广义值栈来获取狭义值栈
		ValueStack vs = ac.getValueStack();
		// 保存要推送到值栈的内容
		vs.push("string");
		vs.set("str", "我是狭义值栈要推送到页面的内容");
		
		return "success";
	}

}


显示页面index.jsp:


<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!-- 引入struts标签库 -->
<%@taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
	<h1>登录成功后的index界面</h1>
	<!--  struts调试-->
	<s:debug></s:debug>
	EL表达式:${sessionScope.currentdate }
	<br>
	<!-- 用于OGNL表达式获取从后台传输过来的数据 -->
	<s:property value="str" />
	<br>
	<!-- #表示ActionContext.getContext().
     #session表示ActionContext.getContext().getSession() -->
	<s:property value="#session.currentdate" />
	<br>
	<!--遍历后台传输过来的list集合  -->

	<s:iterator value="#session.users" var="user">
		<s:if test="#user.id==1">
			<p style="color: red;">
				<s:property value="#user.id" />
				<s:property value="#user.name" />
			</p>
		</s:if>
		<s:elseif test="#user.id==2">
			<p style="color: blue;">
				<s:property value="#user.id" />
				<s:property value="#user.name" />
			</p>
		</s:elseif>
		<s:else>
			<p style="color: yellow;">
				<s:property value="#user.id" />
				<s:property value="#user.name" />
			</p>
		</s:else>
	</s:iterator>
	<br>
	<s:property value="#attr.attr1" />
	<br>
	<s:property value="#session.users.{$#this.id==1}.{id}" />
	<br>
	<br>
</body>
</html>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值