Struts2的值栈和OGNL

1、值栈是什么?

  值栈是对应每一个请求对象的内存数据中心。每次请求一个action生成一个狭义上的值栈(ValueStack)。这个值栈存储了我们定义在action中的每个属性的值,这些属性必须有get和set方法,以致于我们可以在jsp页面中使用EL表达式。

2、值栈的作用:

  值栈能够在线程安全的情况下提供公共的数据存取服务。当有请求到达时,struts会为每个请求创建一个新的值栈。值栈封装了一次请求所有需要操作的相关的数据。

3、值栈的内容:

  在struts中是有广义和狭义值栈之分的。狭义值栈一般指的是实现com.opensymphony.xwork2.util.ValueStack接口。主要支持EL表达式来存取数据。

  广义值栈指的是ActionContext对象。在ActionContext对象中可以存放参数和值

例如:session、request、application等。

4、值栈的基本使用:

  一般来讲都是先获取ActionContext对象。

ActionContext actionContext=ActionContext.getContext();

  通过ActionContext对象来获取狭义上的值栈。

ValueStack value=actionContext.getValueStack();

  通过set方法设值。

value.set("name", "fangchao(value)");
        value.set("age", 21);

  在前台Hello.jsp中获取值。

获取狭义上的值栈数据:<s:property value="name"/><s:property value="age"/><br>

  当然也需要在struts.xml中设置

<package name="hello" namespace="/" extends="struts-default">
        <action name="hello" class="com.fangchao.action.HelloAction">
            <result name="success">success.jsp</result>
        </action>
    </package>

  也可以在jsp中使用session等,后台代码如下:

Map<String, Object> session=actionContext.getSession();
        session.put("name", "fangchao2(value)");
        session.put("age",23);
        
        
        Map<String, Object> application=actionContext.getApplication();
        application.put("name", "fangchao3");
        application.put("age", 25);

  前台代码:

请求参数:<s:property value="#parameters.name"/><s:property value="#parameters.age"/><br>
    
    request:<s:property value="#request.name"/><s:property value="#request.age"/><br>
    session:<s:property value="#session.name"/><s:property value="#session.age"/><br>
    application:<s:property value="#application.name"/><s:property value="#application.age"/><br>
    attr:<s:property value="#attr.name"/><s:property value="#attr.age"/><br>

推荐阅读:

Struts 的详细介绍请点这里
Struts 的下载地址请点这里

猜你喜欢

转载自www.linuxidc.com/Linux/2017-03/141472.htm