- 浏览: 1590375 次
- 来自: 上海
文章分类
- 全部博客 (374)
- Java (101)
- Struts (54)
- Oracle (30)
- JavaScript (16)
- Spring (27)
- Hibernate (16)
- MyEclipse (3)
- JSF (1)
- FreeMarker (2)
- SiteMesh (2)
- JfreeChart (2)
- Ibatis (2)
- JSP (12)
- MyBatis (4)
- SWFupload (1)
- EJB (4)
- Jboss (4)
- WebService (2)
- Linux (16)
- Android (2)
- XML (6)
- Java 网络编程 (13)
- AXIS2 (1)
- FTP (1)
- Jswing (1)
- Socket (3)
- 杂文选集 (6)
- solr (2)
- PS (1)
- Tomcat (7)
- JDBC (9)
- Highcharts (1)
- maven (1)
- Nodejs (0)
- navicat (2)
- Exception (5)
- eclipse (3)
- jQuery (1)
- springMVC (4)
- MySQL (11)
- SVN (1)
- Sql Server (1)
- zookeeper (1)
- JVM (1)
- Groovy (2)
- Git (1)
- Nginx (1)
- DynamicReport (1)
- IDEA (2)
- JasperReports (1)
- Postgresql (2)
- Mac (1)
- gradle (1)
- 数据结构算法 (1)
最新评论
-
hpu145:
引用引用
java 千分位的添加和去除 -
被遗忘的下路:
少了个junit-4.8.2的包
SSH2整合完整案例(四十三) -
白天看黑夜:
java过滤emoji字符处理,希望能帮到你http://ww ...
emoji 表情图片解决方法 -
caipeiming:
这个挺好JavaScript实现input输入框控件只允许输入 ...
js 控制文本框只能输入中文、英文、数字等 -
双子树:
东西太好啦受教啊
Struts2 JSP中将list,set ,Map传递到Action然后<s:iterator>遍历(三十五)
1.OGNL是Object Graph Navitagtion Language,对象导航语言) 是一种功能强大的EL(Expression Language,表达式语言)。通过OGNL,可以使用简单一直的表达式语法,存储对象的任意属性,调用对象的方法,遍历整个对象的结果图和实现字段类型转换等功能。
2.OGNL表达式有如下几个特点:
A: 将视图元素好模型对象绑定在一起
B: 将表格元素同Swing TableModel 对应起来。
C: 将Web页面元素同后台服务业务对象对应起来
3.OGNL表达式的基础单元是导航连(Navigation chain),通常简称为链。最简单的链有如下部分组成:属性名,方法调用, 数组索引。
4.例如:有一本书 book,它有多个作者(author),每个作者都有个年龄(age).如果使用OGNl表达式获取这本书的第一个作者的年龄,并将年龄转换为字符串类型。则这个OGNL表达式为:
book.author[0].age.toString().
在这个OGNL表达式中,author[0]即为数组索引,age 为属性名,toString() 为方法。
5.OGNL提供的常量类型:
6.OGNL 操作符
===========7.OGNL提供调用任何方法的能力。========
例如调用javabean的属性的getXXX() 方法,调用静态方法 或者 静态字段,调用构造方法。
---1.访问JavaBean的属性。也就是调用JavaBean的属性的getXXX()方法---
---------2.调用静态方法和静态字段--------
--------3.调用构造方法--------
===========8.索引的访问===========
OGNL支持数组和列表索引,javabean的索引属性和OGNL对象索引属性。
--------- 1 访问 数组和列表索引-------------
--------- 2.javaBean的索引属性----------
---------3.OGNL对象索引属性-----------
======9.使用OGNL操作集合================
创建列表,创建数组,创建Map
---------------1.创建列表--------------
----------2.创建数组---------
--------3.创建Map------------
=========10.使用集合的伪属性========
==========投影===============
==============选择================
============Struts2 ValueStack=============
-------值栈 ValueStack--------
-------[N]语法--------
-------top--------
==============命名对象================
--------使用命名对象实例------------
1.action
2.ognl.jsp
3.struts.xml
4.访问
---http://localhost:8080/Struts2_Ognl/myOgnlAction.action
--可以看到 attr获取的值为myRequest 说明 如果PageContext不存在就会一次搜索request session application
==================使用OGNL=================
1.OGNLAction java
2.struts.xml
3.index.jsp
4.访问
---http://localhost:8080/Struts2_Ognl/ognlAction.action
2.OGNL表达式有如下几个特点:
A: 将视图元素好模型对象绑定在一起
B: 将表格元素同Swing TableModel 对应起来。
C: 将Web页面元素同后台服务业务对象对应起来
3.OGNL表达式的基础单元是导航连(Navigation chain),通常简称为链。最简单的链有如下部分组成:属性名,方法调用, 数组索引。
4.例如:有一本书 book,它有多个作者(author),每个作者都有个年龄(age).如果使用OGNl表达式获取这本书的第一个作者的年龄,并将年龄转换为字符串类型。则这个OGNL表达式为:
book.author[0].age.toString().
在这个OGNL表达式中,author[0]即为数组索引,age 为属性名,toString() 为方法。
5.OGNL提供的常量类型:
1.字符串常量 指以 单引号 '' 或 双引号 “” 括起来的字符串。 例如:‘HuiZhi’ 和 “HuiZhi”。 在OGNL中可以使用单引号 来界定字符串常量,这点和Java不相同。但是如果一个字符串只有一个字符组成,则必须使用 双引号。 例如 :可以使用 “H”,却不能使用‘H’。 2.字符常量 指以单引号括起来的字符,例如‘H’ “H”与 ‘H’ 前者是字符串常量,后者是字符常量。 3.数值常量 指 int long float double BigDecimal BigInteger 类型常量 这些常量的指定形式如下: 例如: 123 指定了int 类型常量 例如: 123l 或者 1234L 指定long类型的常量 例如: 123.4f 指定float 类型常量 例如:123.4 或者 123.4D 或者123.4d 指定double类型的常量 例如:123B 或者 123b 指定 BigDecimal类型常量 例如: 123H 或者 123h 指定BigInteger 类型的常量 (数值后面的字母不区分大小写,例如 123l 和 123L 都正确) 布尔常量 true 和 false null 常量
6.OGNL 操作符
1.逗号(,)操作符 逗号操作符用来分隔两个或多个独立的表达式,而整个表达式的值取值于最后一个表达式。例如 表达式 1+1,2+2 由于整个表达式的取值于最后一个表达式,所以该表达式的值为2+2 即为 4. 2.花括号“{}” 操作符 花括号操作符用来创建列表,例如表达式: {“xiaoqi”,"xiaoxue","candy"}. 3.in 和 not in 操作符 in 和 not in 操作符用来判断一个值是否存在于一个指定的集合中。 例如: userName in{“xiaoqi”,“candy”,“xiaoxue”} 和 userName not in {“xiaoqi”,“xiaoxue”,“candy”} 4.除了上面的操作符,OGNL还支持所有的java操作符(> < = >=)
===========7.OGNL提供调用任何方法的能力。========
例如调用javabean的属性的getXXX() 方法,调用静态方法 或者 静态字段,调用构造方法。
---1.访问JavaBean的属性。也就是调用JavaBean的属性的getXXX()方法---
如果 OGNL上下文的根对象是一个Book类的实例对象book,则可以使用如下的OGNL表达式获取图书作者的姓名: book.getAuthor().getName()
---------2.调用静态方法和静态字段--------
OGNL支持调用类中的静态方法和静态字段。调用的语法格式如下: @class@method @class@field 例如:要将一个字符串123 转换成int类型数字的123,可以使用如下的代码, @java.lang.Integer@parseInt("123") 其中 java.lang.Integer是类名,parseInt()是方法名。 其中类名必须完整,例如java.lang.Integer.不能只写Integer。而如果省略类 名,则默认类为 java.lang.Math.例如 调用 java.lang.Math类的max()方法。可以 直接使用如下格式。@@max(123,345). 调用静态字段。例如 调用 java.lang.Math类中的PI字段,代码如下 @java.lang.Math@PI 或者 @@PI
--------3.调用构造方法--------
OGNL还支付调用构造方法,使用new 关键字创建对象 例如 创建一个Date对象,代码如下: new java.util.Date(). 这的类名也必须完整给出。
===========8.索引的访问===========
OGNL支持数组和列表索引,javabean的索引属性和OGNL对象索引属性。
--------- 1 访问 数组和列表索引-------------
new String[]{"a","b","c"} 则访问数组中第二个元素的OGNL表达式: new String[]{"a","b","c"}[1]. 在OGNL中,使用列表索引与是哟in个数组索引一样,例如如下表格: {"aa","bb","ccc"} 则访问该列表的的二个元素的OGNL表达式为: {"aa","bb","ccc"}[1].
--------- 2.javaBean的索引属性----------
JavaBean的索引属性就是获取和这是数组时使用的属性。使用索引属性需要提供俩对setXX()和getXX()方法。其中,一对用于数组,另一对用户数组中的元素。 使用索引属性的语法格式如下: public PropetyType[] getPropertyName() public void setPropertyName(PropertyType[] values) public Property getPropertyName(int index) public void setPropertyName(int index,PropertyType value) 例如 创建一个索引属性 str 内容如下: private String[] str; public String[] getStr(){return str;} public void setStr(String[] str){this.str=str;} public String getStr(int i){return str[i];} public void setStr(int i,String newStr){str[i]=newStr;} 则 如下OGNL表达式: str[1] 可用用来调用getStr(1),获取数组的第二个元素值。 而如果是设置,则该表达式可以调用setStr(1,value)方法,设置数组的第儿歌元素值。
---------3.OGNL对象索引属性-----------
OGNL扩展了索引属性的概念,可是使用任意的对象来作为索引。这与javaBean不同。JavaBean的索引属性只能使用整形作为索引。 例如:session对象有如下设置和获取属性attribute的方法: public void setAttribute(String name,Object value) public Object getAttribute(String name) 可以使用如下表达式在sessino中设置一个attribute属性userName: session.attribute["userName"]
======9.使用OGNL操作集合================
创建列表,创建数组,创建Map
---------------1.创建列表--------------
就是使用花括号{}将元素括起来,多个元素之间使用 逗号 (,)都好隔开,例如 下面的OGNL表达式 {“aaa”,“bbb”,“ccc”} 列表元素的访问方式,例如访问第一个元素 {“aa”,“bb”,“cc”}[0]
----------2.创建数组---------
需要使用new 关键字,例如下面代码 new String[]{"a","b","v"} OGNL也支持如下方式new String[3],创建一个含有 3个元素的数组,但是没有指明数组的元素,则数组中的元素默认都是空字符串。 数组元素的访问方式,例如访问第一个元素 new String[]{"a","c","v"}[0]
--------3.创建Map------------
需要使用#{}操作符和 key—value键值对。语法格式如下 #{"key1":"valu1","key2":"value2","key3":"value2","key4":"value4"...} 例如: #{"admin":"xiaoqi","manager":"xiaoxue","operator":"candy"} Map元素的访问方式,录入访问的key为admin的元素 #{"admin":"xiaoqi","manager":"xiaoxue","operator":"candy"}["admin"] 或者 #{"admin":"xiaoqi","manager":"xiaoxue","operator":"candy"}.admin
=========10.使用集合的伪属性========
集合类型 | 方法调研那个示例代码 | 伪属性 | OGNL表达似乎 |
List | list.iterator(),list.size() | iterator,size | list.iterator, lise.size |
Set | set.isEmpty(),set.iterator() | iterator,isEmpty | set.iterator,set.isEmpty |
Map | map.keySet(),map.values() | keys,values | map.keys,map.values |
Iterator | iterator.next(),iterator.hasNext() | next,hasNext | iterator.next,iterator.hasNext |
Enumeration | enum.nextElement(),enum.hasMoreElements() | next或nextElement,hasNext或hasMoreElements | enum.next或next.nextElement,enum.hasNext 或enum.hasMoreElements |
==========投影===============
在OGNL中,投影是指在一个集合中对每个元素调用相同的方法,或者抽取相同的属性,并将结果保存为一个新的集合。 例如有如下列表:{1,2,3,4,5} 现在通过投影,将上面列表中的每个元素都从整形换成字符类型,从而组成了一个新的列表。 如下代码: {1,2,3,4,5}.{#this.toString()} 则得到新的列表如下: {"1","2","3","4","5"}
==============选择================
在LGNL中,选择是指使用表达式从集合中选择某些元素,并将这些元素保存到新的集合中。 例如有如下列表: {1,2,3,4,5} 现在通过选择,将上面的列表中大于2的元素选择出来,保存到新的列表中,如下代码: {1,2,3,4,5},{?#this>2} 则新的列表如下: {3,4,5}
============Struts2 ValueStack=============
-------值栈 ValueStack--------
Struts2在OGNL之上提供了的最大附加特性就是支持 值栈 ValueStack.在OGNL上下文中只能存在一个根对象,而Struts2的值栈允许存储多个虚拟根对象。Struts2将OGNL上下设置为Strus2的ActionContext,并将值栈最为OGNL的根对象。 例如: 值栈中有两个对象,Book对象book和Song对象song,对这两个对象的说明如下: book有两个属性,图书名name和图书价格 price。 song有两个属性,歌曲名称name和歌曲内容lyrics book先入栈,song后入栈。 这时在OGNL上下文中,如果访问book的price属性 表达式如下:price 如果访问song的lyrics属性,表达式为 lyrics 如果访问book的name属性 表达式为:name 如果反问song的name,则表达式必须指明对象,如下: song.name (因为此时OGML上下文中存储了两个name,所以 后面的需要明确指定。)
-------[N]语法--------
[N].propertyName语法,可以用来指定从值栈中的位置N开始,向下查找对象的指定属性(propertyName).其中N是从0开始的整数。 例如: 值栈中有 3个对象,User1,User2,User3 他们都有name属性。如果使用[N].peopertyName语法。则 访问第一个对象user1的name属性,可以使用如下表达式[0].name 访问第二个对象user2的name属性,可以使用如下表达式[1].name 访问第三个对象user3的name属性,可以使用如下表达式[2].name
-------top--------
top:关键字用于获取栈顶对象 例如。要获取值栈中的user2对象,可以使用如下表达式: [1].top 访问user2的name属性可以使用如下表达式 [1].top.name
==============命名对象================
Struts2还提供了一些命名对象,这些对象没有存在值栈中,而是保存的ActionContext中。而访问这些对象要使用#标记,而这些命名对象都是Map类型 Struts2提供的命名对象如下: 1.parameters:用来访问请求参数。例如#parameters["name"] 或者 #parameters.name.相当于request.getParameter("name"). 2.request: 用来访问request属性,例如#request['login']或#request.login。相当于request.getAttribute("login"). 3.session:用来访问session的属性,例如 #session['login']或 #session.login,相当于 session.getAttribute('login'). 4.application: 用来访问application的属性,例如:#application['login']或#application.login,相当于application.attribute("login"); 5.attr:用来访问PageContext.如果PageContext不可用,则一次搜索request,session,application。例如:#attr['login'] 或 #attr.login
--------使用命名对象实例------------
1.action
package com.sh.action; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class MyOgnlAction extends ActionSupport { @Override public String execute() throws Exception { HttpServletRequest request=ServletActionContext.getRequest(); request.setAttribute("sameName", "myRequest"); HttpSession session=request.getSession(); session.setAttribute("sameName", "mySession"); ServletContext appliaction=ServletActionContext.getServletContext(); appliaction.setAttribute("sameName", "myApplication"); return SUCCESS; } }
2.ognl.jsp
<body> <center> ===============使用Struts2的命名空间====================<br/> 访问request请求属性:<s:property value="#request.sameName"/><br/> 访问session属性:<s:property value="#session.sameName"/><br/> 访问application属性:<s:property value="#application.sameName"/><br/> 访问PageContext属性:<s:property value="#attr.sameName"/><br/> </center> </body>
3.struts.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <!-- 定义国际化资源文件的基本名称 --> <constant name="struts.custom.i18n.resources" value="com.sh.action.package"/> <constant name="struts.i18n.encoding" value="utf-8"/> <package name="/user" extends="struts-default"> <action name="myOgnlAction" class="com.sh.action.MyOgnlAction"> <result name="success">/ognl.jsp</result> </action> </package> </struts>
4.访问
---http://localhost:8080/Struts2_Ognl/myOgnlAction.action
--可以看到 attr获取的值为myRequest 说明 如果PageContext不存在就会一次搜索request session application
==================使用OGNL=================
OGNL(Object Graph Navigation Language)对象导航语言,是一种方便的操作对象属性的开源表达式语言,目的就是避免在Jsp页面中出现过多的<% %>,实现页面与后台代码分离。在应用中经常遇到的问题是 “#” “$” "%" 这个三个符号 1.“#” 访问OGNL上下文和Action上下文,用于过滤和投影集合, 例如:books.{?#this.price<100} 2."$"符号 在国际化资源文件中使用OGNL表达式, 例如年龄在${min}和 ${max}之间。 在Struts2配置文件中使用OGNL表达式。 3."%"符号 当标签的属性为字符串类型时,计算OGNL表达式的值。
1.OGNLAction java
package com.sh.action; import java.util.LinkedList; import java.util.List; import java.util.Map; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.interceptor.ServletRequestAware; import org.apache.struts2.interceptor.SessionAware; import org.apache.struts2.util.ServletContextAware; import com.opensymphony.xwork2.ActionSupport; import com.sh.pojo.News; public class OGNLAction extends ActionSupport implements ServletRequestAware,SessionAware,ServletContextAware { private HttpServletRequest request; private Map session; private ServletContext application; private List<News> newsList; public void setServletRequest(HttpServletRequest arg0) { this.request=arg0; } public void setSession(Map<String, Object> arg0) { // TODO Auto-generated method stub session=arg0; } public void setServletContext(ServletContext arg0) { // TODO Auto-generated method stub application=arg0; } public List<News> getNewsList() { return newsList; } @SuppressWarnings("unchecked") public String execute() throws Exception { request.setAttribute("userName", "userName from request"); session.put("userName", "userName from session"); application.setAttribute("userName", "userName from application"); newsList=new LinkedList<News>(); News new1=new News(); new1.setNid(1); new1.setNtitle("the first news title"); new1.setNcontent("the first news content"); new1.setNtime("2012-08-08"); newsList.add(new1); News new2=new News(); new1.setNid(2); new1.setNtitle("the second news title"); new1.setNcontent("the second news content"); new1.setNtime("2012-08-18"); newsList.add(new2); News new3=new News(); new1.setNid(3); new1.setNtitle("the three news title"); new1.setNcontent("the three news content"); new1.setNtime("2012-08-28"); newsList.add(new3); return super.execute(); } }
2.struts.xml
<action name="ognlAction" class="com.sh.action.OGNLAction"> <result>/index.jsp</result> </action>
3.index.jsp
<body> <center> <h3>访问OGNL上下文和Action上下文</h3> request.userName :<s:property value="#request.userName"/> session.userName :<s:property value="#session.userName"/> application.userName :<s:property value="#application.userName"/> <hr/> <h3>用于过滤和投影集合</h3> [list] <s:iterator value="newsList"> <s:property value="nid"/>. <s:property value="ntitle"/><br/> </s:iterator> [/list] ID是“1”的新闻标题:<s:property value="newsList.{?#this.nid==1}.{ntitle}[0]"/> <hr/> <h3>构造Map</h3> <s:set name="books" value="#{'book1':'23','book2':'55','book3':'66'}"/> book1的价格是:<s:property value="#books['book1']"/> <hr/> <h3>%用途</h3> <s:url value="#books['book1']"/>: <s:url value="%{#books['book1']}"/> <hr/> <h3>$使用</h3> request.userName:${requestScope.userName} session.userName:${sessionScope.userName} application.userName:${applicationScope.userName} <hr/> </center> </body>
4.访问
---http://localhost:8080/Struts2_Ognl/ognlAction.action
- Struts2_Ognl.zip (3.3 MB)
- 下载次数: 39
评论
2 楼
muyi_3622
2014-12-04
[color=red][/color]哦ijhsIOV
1 楼
muyi_3622
2014-12-04
[color=yellow][/color]
发表评论
-
解决getOutputStream() has already been called for this response
2014-07-30 19:16 3316java.lang.IllegalStateException ... -
Struts2 + ajaxFileUpload 异步上传文件
2013-12-04 19:33 1888ajaxFileUpload下载地址http://www.ph ... -
Struts2 Action 解析提交的XML
2013-10-16 12:30 1634package com.bjdata.bjsearch.p ... -
MyBatis+Spring+Struts2
2012-11-28 00:32 10613MyBatis3.1.1+Spring3.1.2+Struts ... -
Ibatis 整合spring + Struts2 加入OSCACHE
2012-11-14 00:10 4556说明: 使用 spring2.5 +ibatis2.3 ... -
Struts2中使用JfreeChart
2012-11-06 09:02 16391.jar commons-fileupload-1.2.2. ... -
Struts2整合SiteMesh
2012-11-05 10:33 76551.导入Struts2的jar 和 sitemesh.jar ... -
Struts2 编写安全策略(四十五)
2012-09-23 23:53 2292编写安全策略 包含(1 ... -
SSH2整合完整案例(四十三)
2012-09-14 09:34 20687注解配置:Struts2+Spring2.5+Hibernat ... -
Struts2 阻止表单重复 和 等待页面(四十四)
2012-09-23 21:13 2141表单重复提交现象 导 ... -
Struts2 文件上传,下载,删除(四十一)
2012-09-10 23:37 12329本文介绍了: 1.基于表单的文件上传 2.Struts 2 的 ... -
Struts2 文件上传,下载的类型(四十二)
2012-09-06 23:18 1994声明: 以下复制他人的!!! Struts2 文件上传 之 ... -
Struts2 常用标签使用(三十九)
2012-09-03 09:28 64261.append标签 使用append标签可以把多个集合对 ... -
Struts2 timer拦截器(三十二)
2012-08-31 02:17 20691.Strus2系统拦截器中,timer拦截器可以实现输出Ac ... -
Struts2 常用标签使用(三十九)
2012-09-03 00:50 51.append标签 使用append标签可以把多个集合对 ... -
Struts2 主题和模版设置(四十)
2012-09-03 20:24 4142----------------Struts2 主题----- ... -
Struts2 使用Validation框架验证数据(三十七)
2012-08-30 11:25 18463A:在Struts2的框架汇中,开发者可以通过继承Action ... -
Struts2 使用Validation框架验证数据(三十七)
2012-08-29 14:08 9A:在Struts2的框架汇中,开发者可以通过继承Action ... -
Struts2 iterator 标签遍历 Map,List,数组(三十六)
2012-08-26 18:30 205241.使用iterator 标签 遍历 数组,Map,List ... -
Struts2 JSP中将list,set ,Map传递到Action然后<s:iterator>遍历(三十五)
2012-08-26 02:52 19175---------------List------------ ...
相关推荐
struts2 中 OGNL表达式的使用struts2 中 OGNL表达式的使用
以下是一些关于Struts2中OGNL表达式的关键知识点: 1. **基础语法**:OGNL表达式的格式通常为`object.property`或`object[index]`,用于访问对象的属性或数组/集合的元素。例如,`user.name`将获取名为`user`的对象...
这个“struts2-OGNL表达式测试”可能是一个测试项目或代码示例,旨在演示如何在Struts2应用中使用OGNL表达式。 OGNL是Struts2的核心组件之一,它允许开发者通过简单的字符串表达式来获取或设置对象的属性。这使得视...
本文将深入探讨Struts2中的OGNL表达式,ActionContext以及valuesStack。 首先,OGNL表达式是Struts2中不可或缺的一部分,它允许开发者以一种声明式的方式访问和修改对象的属性。比如,`myBean.getMyProperty()`这样...
在Struts2框架中,OGNL表达式被广泛应用于视图层,比如在JSP页面中用来获取数据。OGNL表达式的语法简洁明了,例如: - **直接调用方法**:`xxx.sayHello()`。 - **访问静态方法和常量**:`@java.lang.String@format...
- Struts2提供了一些内置的状态变量,这些变量可以直接在OGNL表达式中使用。 - 示例代码: ```xml ()"/> ``` 6. **Lambda表达式** - Lambda表达式提供了一种简洁的方式来定义简单的函数或方法。 - 示例代码...
对于集合,可以使用OGNL表达式`list[“key”]`,这里的key通常是集合中的唯一标识符。 3. 调用方法:`对象名.方法名(参数列表)`。例如,`person.sayHello("World")`。 4. 运算符支持:OGNL支持算术运算符(+,-,*,...
在提供的压缩包文件"Struts2_1900_OGNL"中,可能包含了一些关于Struts2 OGNL表达式使用和安全性的示例代码、教程文档或是漏洞分析。通过研究这些内容,你可以更深入地理解和掌握Struts2框架中OGNL表达式的运用,以及...
Struts2 OGNL表达式是Java Web开发中一个重要的概念,它是一种强大的对象图形导航语言(Object-Graph Navigation Language)。在Struts2框架中,OGNL被广泛用于视图层,作为数据绑定的主要手段,使得开发者能够方便...
struts2 OGNL表达式使用 OGNL(Object-Graph Navigation Language)是对象图导航语言,允许开发者在Struts2应用程序中访问和操作对象及其属性。下面是OGNL表达式的使用方法: 访问基本属性 1. 访问值栈中action的...
本篇文章将详细探讨Struts2中的OGNL表达式语言以及标签库。 **OGNL(对象图导航语言)** OGNL是一种强大的表达式语言,它允许开发者通过简洁的语法来访问和操作对象的属性。在Struts2框架中,OGNL扮演着至关重要的...
Struts 2默认的表达式语言是OGNL,原因是它相对其它表达式语言具有下面几大优势: 1、 支持对象方法调用,如xxx.doSomeSpecial(); 2、支持类静态的方法调用和值访问,表达式的格式为@[类全名(包括包路径)]@...
OGNL表达式通常结合Struts2的标签一起使用,比如使用 `<s:property value="expression"/>` 来展示数据。在使用过程中,需要注意#、%和$这三个符号的正确使用: - **#**:通常用于表示OGNL表达式,在Struts2中作为...
- 在Struts2的Action类中,可以使用OGNL表达式来动态地处理请求参数,如`String name = (String)params.get("user.name");` - 在JSP页面上,使用OGNL标签显示和处理数据,如`管理员界面</s:if>`。 通过理解并熟练...
Struts2是一个流行的Java Web...通过深入学习OGNL表达式原理,开发者能够更好地利用Struts2框架,提高Web应用的开发效率和可维护性。对于那些希望在Struts2开发中更进一步的人来说,熟悉和掌握OGNL是必不可少的技能。
#### 三、OGNL表达式的结构 OGNL 表达式的基本单位被称为“链”。链可以包含属性访问、方法调用等。链之间可以通过点号连接,形成更复杂的表达式。 ##### 示例 假设我们有如下对象结构: ```java public class ...
Struts2 通过 OGNL 表达式实现投影 Struts2 框架中,OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,主要用于在 Struts2 应用程序中进行数据绑定和投影。OGNL 表达式可以用于过滤、投影和排序...
在Struts2中,OGNL表达式的使用大大提升了代码的可读性和维护性。 首先,`#`字符在OGNL中扮演着关键角色。它主要用于访问OGNL上下文和Action上下文。`#`前缀可以用来获取`ActionContext`,这包含了四个重要的域:...
在Struts2中,OGNL表达式通常与Struts标签结合使用,如`s:property`标签,用于显示对象的属性值。例如,`<s:property value="name"/>`将显示栈顶对象的"name"属性值。栈顶对象是指在ValueStack(值栈)中位于最顶层...