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

来源:互联网 发布:有淘宝开店条件 编辑:程序博客网 时间:2024/06/06 01:15

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{@Overridepublic 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>


阅读全文
0 0
原创粉丝点击