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


值栈是对应每个请求对象的一套内存数据的封装,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>

@类路径@方法名()




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值