`

struts2 学习笔记四---ongl表达式

阅读更多



OGNL表达式


<s:debug>标签可以在jsp页面中查看CompoundRoot和OGNL Context map中的信息。
如果不经过struts2的过滤器拦截就直接访问jsp页面,那么其中使用的<s:debug>,<s:text>, <s:property value="%{getText()}">等struts2标签都会报告TagUtil.getStack方


法抛出的异常。
1 访问值栈中的action的普通属性: <s:property value="属性名"/>
2 访问值栈中对象的普通属性(get set方法):
<s:property value="对像名.age"/> | <s:property value="user['age']"/> | <s:property value="user[\"age\"]"/>
3


CompoundRoot(根对像) ActionContext.getContext().getValueStack();


ValueStack 查找顺序是从栈顶开始
ValueStack被存储在了request作用域中,可以通过request.getAttribute(…)的方式获得。
push和pop方法对堆栈进行压栈和弹栈。
set方法用于在栈顶的Map对象中设置一个条目,如果栈顶不是一个Map对象,则创建一个Map对象并将其压入栈顶。实验结果:set方法不能设置栈顶的普通JavaBean对象的属性。

OGNL Context内部初始填充的几个重要的key
parameters?一个map对象 取出的值是一个数组,默认为第一个
request ?一个map对象
session ?一个map对象
application ?一个map对象
attr ?一个map对象
返回的都是ognl context map
boolean b = ActionContext.getContext().getContextMap() == ActionContext.getContext().getValueStack().getContext();
System.out.println(b);//结果为true


ActionContext提供了各种针对ValueStack关联的Context的便利操作方法,包括直接返回该Context对象内部存储的各个Map集合对象的便利方法:
put()方法和get()方法就是往该Context Map对象中添加数据和取数据。
getApplication()得到application域中的所有attribute的map对象;
getSession()得到代表session域中的所有attribute的map对象;
getParameters()得到代表所有请求参数的map对象;
getLocale()得到当前用户的Locale信息,是综合了session中保存的Locale与浏览器请求消息中的Locale的结果。
ServletActionContext类继承了ActionContext类,它额外再提供了一些方便的方法,主要是直接返回Servlet有关的API


ValueStack提供了如下一些方法管理其内部的堆栈和关联的Context:
setValue为ognl表达式寻址到的对象设置属性值。 如果想修改指定位置的值,setValue("[0].属性名","值")
findValue方法使用OGNL表达式获取结果。也可以当作ognl context map中的属性直接去找
findString方法对findValue方法获取的结果调用转换器转成字符串,如果该对象的类型没有相关转换器,则调用toString方法,并返回结果字符串。一个特殊之处:如果不用#前缀访


问OGNL Context Map中的对象,则该对象必须是String类型。


property标签
用于输出某个OGNL表达式的值,并进行HTML和XML实体转换,可以认为其内部使用的是ValueStack对象的findString()方法。
如果没有设置value属性,则输出ValueStack栈顶的对象,等效于输出“top”这个特殊的OGNL表达式,”top”表示栈顶的对象。
如果采用不加#前缀的方式输出Context中的某个对象,这个对象必须是String类型,以此可以说明该标签内部调用的是ValueStack.findString()方法。


格式:<s:property value=””default=”” escape=”true|false”/>
如果value中的内容为object,则Struts2都会把它解析成ognl表达式
如果里面需要表示为字符串,则需要将内容用单引号括起来


1、 利用ognl表达式取值(例如:取值堆栈中的username值)
<s:property value="username"/>
2、 取值为字符串
需要将内容用单引号括起来
<s:property value="’username’"/>
3、 设置默认值-default
如果一个对象值取不到,则可以使用default设置一个默认值。
<s:property value="admin" default=”管理员”/>
4、 设定HTML-escape
是否设置返回值为HTML原代码样式
true:解析返回值的html代码 false:原封不动返回值
<s:property value="'<hr/>'" escape="false"/>




<s:push>标签用于将OGNL表达式的值压入栈顶。 注意<s:debug>标签要位于<s:push>标签对之间
<s:push value="#mydate"></s:push>


<s:bean>标签用于实例化一个JavaBean对象,并将其压入栈顶。
<s:bean name="java.lang.String" var="sss"><s:debug></s:debug></s:bean>
定义bean,并使用param来设定新的属性值,如果设置了var属性,还会将实例化的对象存储进ValueStack关联的Context Map中。
<s:bean name="com.bjsxt.struts2.tags.Dog" var="myDog" >
<s:param name="name" value="'pp'"></s:param>
</s:bean>
拿出值:因为在actionContext中,所以使用#
<s:property value="#myDog.name"/>
当<s:bean>不指定var时,则对象相关属性会在值栈中。如果需要访问,则只能在<s:bean>标签内访问。
当<s:bean>标签结束后,则值栈就不存在这个对象了。
<s:bean name="com.bjsxt.struts2.tags.Dog" >
<s:param name="name" value="'pp'"></s:param>
<s:property value="name"/>
</s:bean>




<s:set>标签用于将某个值存入指定范围域中,通常用于将一个复杂的ognl表达式用一个简单的变量来进行引用。
注: var 用于设定变量名
value 变量值(可以是ognl表达式),也可以是字符串
scope 就是的作用范围 request session page application action(默认)


<s:if/elseif/else>等标签用于判断test属性中指定的ognl表达式的结果是否为true,为真则执行标签体中的内容。




行变色
<style type="text/css">
.odd{background-color: #c3f3c3}
.even{background-color: #f3c3f3}
</style>
<table border="1" bordercolor="red">
<s:iterator value="#request" status="myStatus">
<tr class="<s:property value="#myStatus.odd?'odd':'even'"/>">
<td><s:property value="key"/></td>
<td><s:property value="value"/></td>
</tr>
</s:iterator>
</table>


ognl 的语法细节 %{}
1 ognl内部默认的两个key #root #context
2 引用属性可以用”#parameter.id[0]”或”#parameter[‘id’][0]”访问
3 session.attribute[“foo”]等效于session.getAttribute(“foo”)方法。
4 链式表达式 <s:property value="114H.intValue().(#this<112?#this*2:#this/2)"/>
5 静态方法和静态属性的访问调用
要支持静态方法调用,要使用一个常量开关:struts.ognl.allowStaticMethodAccess
<!-- 允许访问静态方法 -->struts.xml中
<constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
<s:property value="@java.lang.Integer@parseInt('a',16)+5"/>
集合对象与操作
1 {}用于创建List集合对象,其中的各个元素之间用逗号分隔。
<s:set value=“{1,3,5,7}” var=“list”/>
2 #{}用于创建Map集合对象,其中的各个元素之间用逗号分隔,元素的key和value之间采用冒号分隔
<s:set value=“#{‘lhm’:96,’zxx’:93,’xpc’:97}”
<s:set value=“#@java.util.LinkedHashMap@{‘lhm’:96,’zxx’:93,’xpc’:97}”
3 in与not in操作符用于判断某个值是否位于某个集合中
<s:iterator value="#{1:'java',2:'c',3:'xml'}">
<input type="checkbox" value="<s:property value='key'/>" <s:property value='key in {2,3} ?"checked":""'/> >
<s:property value="value"/>
</s:iterator>
4 集合伪属性:size/isEmpty/iterator/keys/values/next/hasNext
集合的投影与过滤
投影就是拿着集合中的每个元素去进行运算,各个元素运算的结果组成一个新集合,新集合中的元素个数与原始集合中的元素个数相同。
<s:property value=“persons.{name}”/>
<s:property value=“{5,3,2}.{#this*2}”/>
过滤就是拿着集合中的每个元素去进行布尔运算,运算的结果为true,则将该元素保存到新集合中去。
?:获得所有符合逻辑的元素。
<s:property value=“{5,3,2}.{? #this }”/>
^:获得符合逻辑的第一个元素。
<s:property value=“{5,3,2}.{^ #this>3 }”/>
$:获得符合逻辑的最后一个元素。
<s:property value=“{5,3,2}.{$ #this>2 }”/>
类型转换
转换成boolean类型
整数0转换为false
值为0的字符转化为false
null对象转化为false
投影和选择操作符(e1.{e2} and e1.{?e2})前面的内容会被转换成集合
数字会被转换成从0开始到比该数字小1的所有数字的集合。
Map会被转化成其values属性返回的集合

分享到:
评论

相关推荐

    struts2-core.jar

    struts2-core-2.0.1.jar, struts2-core-2.0.11.1.jar, struts2-core-2.0.11.2.jar, struts2-core-2.0.11.jar, struts2-core-2.0.12.jar, struts2-core-2.0.14.jar, struts2-core-2.0.5.jar, struts2-core-2.0.6.jar,...

    Struts2学习案例--------入门篇

    输出Hello World 使用到struts2标签和jstl表达式 2、 URL:http://localhost:8080/struts100515 输入用户名XXX ------&gt; 提交 ,显示 你好 XXX 使用ONGL表达式 3、 URL:...

    Struts2深入学习----OGNL表达式原理

    Struts2是一个流行的Java Web...通过深入学习OGNL表达式原理,开发者能够更好地利用Struts2框架,提高Web应用的开发效率和可维护性。对于那些希望在Struts2开发中更进一步的人来说,熟悉和掌握OGNL是必不可少的技能。

    struts2 最新漏洞 S2-016、S2-017修补方案 .docx

    S2-016 漏洞是由于 Struts2 的 Ognl 表达式语言解析器存在缺陷,从而导致攻击者可以 inject 恶意代码。这个漏洞影响了 Struts2 的所有版本。 S2-017 漏洞是由于 Struts2 的 DefaultActionMapper 的 ...

    struts2-ssl-plugin-1.2.1.jar

    struts2-ssl-plugin-1.2.1.jar

    json-lib-2.1.jar和struts2-json-plugin-2.1.8.1.jar

    `struts2-json-plugin-2.1.8.1.jar` 则是Struts 2框架的一个插件,主要用于增强Struts 2对JSON的支持。Struts 2是一款非常流行的MVC(Model-View-Controller)框架,用于构建企业级的Java Web应用程序。这个插件允许...

    struts2-json-plugin-2.3.8.jar

    Struts2 JSON Plugin是针对Apache Struts2框架的一个重要组件,版本为2.3.8。这个插件主要的功能是让Struts2应用程序能够轻松地处理JSON(JavaScript Object Notation)数据格式,使得Web应用可以方便地进行JSON序列...

    Struts2表达式语言----OGNL语言指南

    Struts 2默认的表达式语言,

    Struts2入门笔记1-4

    4. 学习笔记的内容可能覆盖了Struts2的基础配置、核心概念、实战技巧和复习巩固,帮助读者逐步掌握Struts2框架的全貌。 以上内容只是根据提供的信息进行的推断和扩展,具体的学习笔记内容可能包括了更详细的技术...

    Struts2-3.24集合jar

    struts2-config-browser-plugin-2.3.24.jar, struts2-core-2.3.24.jar, struts2-jasperreports-plugin-2.3.24.jar, struts2-jfreechart-plugin-2.3.24.jar, struts2-pell-multipart-plugin-2.3.24.jar, struts2-...

    struts2-convention-plugin-2.3.15.1.jar

    struts2-convention-plugin-2.3.15.1.jar

    struts2 学习重点笔记

    ### Struts2 学习重点知识点总结 #### 一、Struts2 概念与架构 **1.1 Struts2 简介** - **定义**:Struts2 是 Apache 组织提供的一个基于 MVC 架构模式的开源 Web 应用框架。 - **核心**:Struts2 的核心其实是 ...

    struts2四天的学习笔记

    13. ** strut2四天笔记**:这份学习笔记可能涵盖了以上所有知识点,包括如何创建Action,配置struts.xml,使用OGNL表达式,处理异常,以及实践中的各种技巧和最佳实践。 在四天的学习过程中,你应该通过实践和理解...

    struts2学习笔记(1)

    ### Struts2学习笔记知识点详解 #### 一、Struts2框架的基本引入步骤 ##### 1. 导入Struts2相关Jar包 在引入Struts2框架时,首先需要将Struts2的相关Jar包导入到项目的类路径中。这些Jar包通常包括核心库以及其他...

    struts2学习笔记.doc

    ### Struts2学习笔记知识点概览 #### 一、环境搭建 **1.1 Struts2简介** - **Struts2概述**:Struts2是一个开源的MVC框架,它结合了Struts 1.x、WebWork和其他一些框架的优点。Struts2的主要目标是简化Web应用程序...

    struts2-jfreechart-plugin-2.1.8.1.jar

    struts2-jfreechart-plugin-2.1.8.1.jar

    struts2学习笔记总结

    本笔记将全面总结Struts2的核心概念、主要功能以及实际开发中的应用。 一、Struts2概述 Struts2是Apache软件基金会下的一个开源项目,它继承了Struts1的优点并解决了其存在的问题,如性能和灵活性。Struts2的核心是...

    struts2学习笔记(完美总结)——转自OPEN经验库

    OGNL是Struts2中用于对象属性访问和表达式语言,它允许在Action、ValueStack和视图层之间传递数据。ValueStack是一个对象栈,它持有ActionContext上下文中的所有对象,包括Action实例、ActionForm、Session、Request...

    张龙圣思园struts2学习笔记word

    张龙圣思园的Struts2学习笔记,无疑为Java开发者提供了一份宝贵的参考资料,它可能涵盖了Struts2的基础概念、核心组件、配置方式以及实战技巧。 首先,让我们深入了解Struts2的核心特性。Struts2是MVC(Model-View-...

    struts2-spring-plugin-2.3.24.1.jar

    最新struts2-spring-plugin-2.3.24.1.jar

Global site tag (gtag.js) - Google Analytics