您的位置:首页 > 编程语言 > Java开发

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

2017-10-27 09:01 369 查看
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标签结合使用
d574
,狭义的值栈属于广义值栈的一部分.                           

            通常意义上,所说的值栈是指广义值栈

   

       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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐