值栈是对应每个请求对象的一套内存数据的封装,struts2会给每个请求创建一个新的值栈.值栈能够线程安全地为每个请求提供公共的数据存取服务.
ognl引入
<s:property value="">
访问某个范围下的灵气要用#
#parameters请求参数 request.getParameters();
#request 请求作用域中的数据 request.getAttribute();
#session 会话作用域中的数据 session.getAttribute();
#application 应用程序作用域中的数据 application.getAttribute();
#attr 按照 page request session application顺序查找值
狭义的值栈测试
public String execute() throws Exception {
System.out.println("执行HelloAction的execute方法");
setMessage(MESSAGE);
//获取ActionContext
ActionContext context = ActionContext.getContext();
//取得值栈
ValueStack valueStack = context.getValueStack();
valueStack.set("valuestackValue", "value stack data.");
return SUCCESS;
}
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>My JSP 'HelloWorld.jsp' starting page</title>
</head>
<body>
Hello World!!!<br>
<s:property value="message"/>
<s:property value="valuestackValue"/>
</body>
</html>
要使用OGNL要在jsp中加入
</pre></p><span style="font-size:18px;"><%@ taglib prefix="s" uri="/struts-tags" %> </span><p></p><p>值栈域测试</p><p></p><pre name="code" class="java">public class HelloAction extends ActionSupport {
public String execute() throws Exception {
System.out.println("执行HelloAction的execute方法");
//获取ActionContext
ActionContext context = ActionContext.getContext();
//取得值栈
ValueStack valueStack = context.getValueStack();
valueStack.set("valuestackValue", "value stack data.");
//session,application是map类型
context.getSession().put("valuestackValue", "session value data.");
context.getApplication().put("valuestackValue", "application value data.");
return SUCCESS;
}
}
<!-- request域中写入数据 -->
<% request.setAttribute("valuestackValue", "value request data."); %>
<body>
<!-- 没有前缀,狭义上的Valuestack -->
valuestack:<s:property value="valuestackValue"/><br>
<!-- 有前缀 -->
parameters:<s:property value="#parameters.valuestackValue"/><br>
request:<s:property value="#request.valuestackValue"/><br>
session:<s:property value="#session.valuestackValue"/><br>
application:<s:property value="#application.valuestackValue"/><br>
</body>
浏览器中输入:http://localhost:8080/struts2demo/helloAction?valuestackValue=paramvaluedata
显示
valuestack:value stack data.
parameters:paramvaluedata
request:value request data.
session:session value data.
application:application value data.
还有一个attr前缀
attr:<s:property value="#attr.valuestackValue"/><br>,就不用测试了吧.
二.OGNL访问复杂对象
1.JavaBean对象
jsp中通过 对象名.属性名 访问
2.List对象
List对象[索引].属性名
3.Map对象
Map对象[Key].属性名
三OGNL访问静态方法与静态属性
1.访问静态属性
@类路径@属性
2.访问静态方法
<constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
@类路径@方法名()