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

struts2学习笔记(五)值栈与ognl

2015-08-01 10:08 489 查看
值栈是对应每个请求对象的一套内存数据的封装,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>

@类路径@方法名()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: