`
cat猫先生
  • 浏览: 4232 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

struts2 OGNL与标签

阅读更多
一.ActionContext:
ActionContext包含了框架的请求处理过程可以访问的所有数据,包含内容从应用程序数据到会话作用域或者应用程序作用域的映射。所有特定应用程序的数据(例如动作公开的属性),都存储在ValueStack上,它是ActionContext中的一个对象。
所有的OGNL都必须根据ActionContext包含的某一个对象求值。默认情况下,OGNL解析会选择
ValueStack,但如果你愿意,可以指定其他的对象的名字。
一个请求的执行,包含几个重要参数:
1.动作:表示执行的步骤;
2.环境:这个环境指的是包含围绕此动作的执行的所有重要数据和资源的容器;
此处数据指的是:请求的数据,返回的数据,资源数据;
只有这两者比配了才能执行出期望的结果;
ActionContext就是提供了一个动作执行的环境;
包含几个对象:
ValueStack,parameters,application,session,attr,request:
parameters:当前请求中,请求参数的映射;
application:应用程序作用域的属性的映射;
session:会话作用域的属性的映射;
request:请求作用域的属性的映射;
attr:按照页面,请求,会话,应用程序作用域的顺序,查找符合的第一个属性;
valueStack:包含当前请求的应用程序特定领域的所有数据;

二.ValueStack
当struts2接收到一个请求之后,会立即创建一个ActionContext,一个ValueStack和一个动作对象,作为应用程序的数据承载者,动作被马上放到valueStack中,以便框架可以通过OGNL进行访问;
在valueStack上的所有数据有一个共性——特定于应用程序领域;
这是struts2上的一句话:我的理解是特定于当前的请求???
valueStack上没有基础结构的对象,对于一个动作来说,如果动作在valueStack上是因为它是具体数据的承载者,不在此上面是因为它仅仅是动作逻辑;
对于ValueStack来说,可以将他理解为一个摒弃了对象特征的Object,它里面可以存放各种对象,并且将对象的属性进行对外呈现;

三.OGNL
OGNL的上下文是ActionContext,
OGNL与这几个对象的关系,无非是这几个对象作为OGNL求值的rootObject而已,OGNL默认的求值根对象是valueStack,如果需要改变求值的跟对象可以通过:
#session['user']
#mapName['属性名']
当出现以上语句时,框架会在ActionContext中查找session对象,并且进行计算

四.标签
标签中OGNL语法:
%{expression},其实在标签中,struts2,对标签的属性做了很多的默认,有很多标签会对输入的字符串默认为OGNL表达式;
当然我们也可以强制写成%{expression},强制进行OGNL解析;

标签一:<s:property value="**" default="**" escape="**"/>
作用:从ActionContext获取属性值
实例:
<s:property value="#session['test1']"/><br />
从session中获取
<s:property value="user.userName"/><br />
从值栈中获取

如果你个类型没有类型转换器,则必须公开一个toString方法;
对于此标签来说,会将会去的对象转换为字符串输出:
1.调用类型转换方法;
2.没有类型转换调用toString方法;

java代码:
ValueStack vs = invocation.getStack();
vs.set("default", "hello");
ServletActionContext.getContext().getSession().put("test1", "Test1");
ActionContext.getContext().put("ActionContextTest", "ActionContextSuccess");

请注意
ActionContext.getContext().put("ActionContextTest", "ActionContextSuccess");
设置的ActionContextTest属性相当于与ValueStack,request这样的对象并列的地位
相对应的页面获取:
<s:property value="#request['ActionContextTest']"/><br />

放入到ActionContext中却能够从request中获取??
其中的奥妙就在于Struts 2中的org.apache.struts2.dispatcher.StrutsRequestWrapper类,这个类是HttpServletRequest的包装类,它重写了getAttribute()方法(在页面中获取request对象的属性就要调用这个方法),在这个方法中,它首先在请求对象中查找属性,如果没有找到(如果你在ActionContext中保存数据,当然就找不到了),则到ActionContext中去查找。这就是为什么在ActionContext中保存的数据能够从请求对象中得到的原因。

有人想是否可以这样获取呢?
<s:property value="#ActionContextTest"/><br />
当然这样也是没有丝毫问题的,同样可以取到。

标签二:<s:set name="**" scope="**" value="**" />
作用:给一个属性指定一个别名,即可以将此对象的值设置到ActionContext中,也可以设置到任何作用域中;默认为动作作用域内,即ActionContext中;
scope可取值application,session,request,page或者action,默认为action
默认情况下,属性会变为ActionContext的一个命名对象,与valueStack,会话映射齐名。这意味着可以直接使用#myObejct来引用。
举例如下:
<s:set name="userName" value="user.userName" />
<s:property value="#userName"/>
name必须,类型:string  存储的key;
scope否,类型:string   存储的区域;
value必须,类型object   OGNL表达式;

标签三:<s:push value="**">
</s:push>
作用:push标签允许你将属性放在valueStack上,当你将对象放在ValueStack之后,它的所有属性可以通过第一级别的OGNL表达式访问。
当push运行结束后,从valueStack中删除此对象;
<s:push value="user">
  <s:property value="userName"/>
</s:push>
标签四:<s:bean name="**" var="**">
         </s:bean>
作用:与set,push标签的不同是,不需要使用已经存在的对象,自创建一个对象的实例,并且把他放在valuestack上或者设置为ActionContext的顶级作用域;
bean标签像是一个set标签和push标签的混合体,主要的不同是bean标签不使用一个已经存在的对象。你可以新创建一个对象的实例,把它放在ValueStack或者设置为ActionContext的顶级引用。默认情况下,对象会放到valueStack上,并且在标签存在期间一直保存在valueStack上。
如果想在bean之外进行访问,则可以使用var属性为这个对象指定一个引用名,那么这个引用会作为一个命名参数存在于ActionContext中,在请求周期内可以使用#操作符访问这个对象。

标签五:
<s:action name="" namespace="" var="" executeResult="" flush="" ignoreContextParames=""/>
作用:从当前的视图层主动发起动作;

总结:以上是5个标签是数据标签。
property用于从动作作用域即ActionContext中取出数据;
set用于将ActionContext中的某一个深层次的对象设置别名,可以设置到ActionContext中任意对象中,默认是ActionContext中;
push用于将某一对象的访问级别进行提升到ValueStack级别;
bean用于将新创建的对象放入到valueStack或actionContext创建引用;.
分享到:
评论

相关推荐

    Struts2 OGNL标签详解析实例

    Struts2 OGNL---标签详解析 都有实例 适合初学者

    struts2 ognl的用法

    4. **与Struts2的集成**:OGNL可以无缝集成到Struts2的Action、拦截器等组件中。 5. **动态性**:OGNL表达式可以在运行时动态解析。 #### 二、OGNL在Struts2中的使用方式 OGNL在Struts2中主要用于页面显示数据、...

    Struts2_OGNL

    在掌握Struts2和OGNL的基础上,开发者可以进一步学习Struts2的其他组件和特性,如标签库、异常处理、国际化支持、拦截器机制、输入校验、文件上传和下载等,这些都是构建复杂Web应用不可或缺的组件和功能。

    struts2 标签 OGNL

    除了OGNL,Struts2还提供了一个丰富的标签库,包括UI标签和非UI标签。UI标签主要用于创建HTML表单,非UI标签则提供控制逻辑,如条件语句。UI标签通常有通用属性,比如`label`用于设置控件的名称,`labelposition`...

    struts2 OGNL 表达式及各种标签的使用

    4. **Struts2 OGNL标签** - `&lt;s:property&gt;`:用于显示对象的属性值,如`&lt;s:property value="user.name" /&gt;`。 - `&lt;s:set&gt;`:用于设置变量,如`&lt;s:set var="myVar" value="user.name" /&gt;`。 - `&lt;s:if&gt;`和`&lt;s:else&gt;...

    struts2 OGNL表达式

    OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,它被Struts2框架广泛用于视图层与模型层之间的数据绑定和交互。通过OGNL,开发者可以轻松地访问和操作对象图中的任何属性,实现灵活的数据传递。 ...

    Struts2之Ognl详解案例TextOgnl

    在Struts2中,OGNL主要用作视图层与模型层之间的数据绑定工具,使得开发者能够方便地在JSP页面中动态地访问Action类的属性。 二、OGNL的语法特性 1. 访问对象属性:`#object.property`,例如,访问Action类的属性`...

    struts2 ognl表达式

    在Struts2中,OGNL表达式可以嵌入到各种基本标签中,如`s:textfield`, `s:property`, `s:action`等,以实现动态的数据展示和交互。例如,`&lt;s:property value="%{#session.user.name}" /&gt;`会将session中user对象的...

    struts2_OGNL Demo

    Struts2_OGNL Demo 是一个用于演示Struts2框架中OGNL(Object-Graph Navigation Language)表达式语言的实例。这个项目旨在帮助开发者理解和学习如何在Struts2中使用OGNL来操纵对象和数据。OGNL是Struts2中一个重要的...

    java的Struts中的OGNL标签的使用,详细介绍

    此外,OGNL标签还可以与Struts2的其他标签结合使用,如`s:iterator`,用于遍历集合: ```jsp ``` 在这个例子中,`users`是Action类的一个属性,假设它是一个用户列表。`s:iterator`将遍历这个列表,每次迭代都...

    struts2 ognl

    3. Struts2 OGNL标签:介绍Struts2提供的各种OGNL相关的标签,如`s:textfield`、`s:property`、`s:if`等,以及它们在JSP页面中的用法。 4. 安全性问题:由于OGNL的灵活性,它也带来了一些安全风险,例如OGNL注入...

    Struts2的标签库及OGNL表达式语言

    Struts2是一个流行的Java web开发框架,其核心特性之一就是使用OGNL(Object-Graph Navigation Language)作为表达式语言,并提供了丰富的标签库来简化视图层的开发。本篇文章将详细探讨Struts2中的OGNL表达式语言...

    struts2标签使用例子

    在Struts2框架中,标签库是其一大特色,它提供了丰富的自定义标签,使得开发者能够更加便捷地创建动态页面。这些标签极大地简化了JSP页面的编写,提高了代码的可读性和可维护性。 1. **Struts2核心标签库**: - `s...

    Struts2自定义分页标签

    本资源详细介绍了如何在Struts2中自定义分页标签,使得开发过程更加便捷。 在Struts2中,分页通常涉及到以下几个关键步骤: 1. **创建Action类**:首先,你需要创建一个Action类,该类将处理用户的请求,包括获取...

    struts2中的ognl

    8. **Struts2标签与OGNL**: - `&lt;s:set&gt;`标签常用来设置值栈中的变量。 - `&lt;s:iterator&gt;`将当前迭代对象置于栈顶,并把`status`放入OGNL上下文。 - `&lt;s:property&gt;`标签用于显示栈顶或指定对象的属性值。 - 静态...

    struts2_ognl实验代码

    在"4-5struts2的标签库-值栈-OGNL"这个实验代码中,你会看到如何在Struts2中集成OGNL。Struts2的核心组件之一是值栈(Value Stack),这是一个存储请求相关的数据结构。当一个Action执行后,它的结果会放在值栈的...

    struts2标签和OGNL表达式

    在Struts2中,OGNL表达式通常与Struts标签结合使用,如`s:property`标签,用于显示对象的属性值。例如,`&lt;s:property value="name"/&gt;`将显示栈顶对象的"name"属性值。栈顶对象是指在ValueStack(值栈)中位于最顶层...

    Struts2 & OGNL

    在这个主题中,我们将深入探讨Struts2与OGNL的整合以及它们在实际开发中的应用。 **Struts2框架概述** Struts2是Apache软件基金会的开源项目,它是Struts1的升级版,提供了更多的特性和灵活性。Struts2的核心设计...

    struts2 OGNL之&lt;s:property&gt;标签访问值栈(value stack)用法

    在这个主题中,我们将深入探讨OGNL(Object-Graph Navigation Language)以及如何通过`&lt;s:property&gt;`标签来访问Struts2中的值栈(Value Stack)。值栈是Struts2中一个核心的概念,它是一个存储用户请求数据和应用...

Global site tag (gtag.js) - Google Analytics