




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1.OGNL达式语言OGN 是 ObjectGraphicNavigationLanguage(对象图导航语言)的缩写,它是一个开源项目。Struts2 框架使用 OGN 蚱为默认的表达式语言。相对 EL 表达式,它提供了平时我们需要的一些功能,如:支持对象方法调用,如 xxx.sayHello();支持类静态方法调用和值访问,表达式的格式为类全名(包才 S 包路径)方法名|值名,例如:java.lang.Stringformat(foo%s,bar)或cn.itcast.ConstantAPP_NAME 操作集合对象。一Ognl 有一个上下文(Context)概念,说白了上下文就是一个 MA
2、P 吉构,它实现了java.utils.Map 接口,在 Struts2 中上下文(Context)的实现为 ActionContext,下面是上下文(Context)的结构示意图2 .访问上下文(Context)中的对象需要使用#符号标注命名空间,如#application、#session另外 OGN 会设定一个根对象(root 对象),在 Struts2 中根对象就是 ValueStack(值栈)。如果要访问根对象(即 ValueStack)中对象的属性,则可以省略#命名空间,直接访问该对象的属性即可。在 struts2 中,根对象 ValueStack 的实现类为 OgnlValueS
3、tack,该对象不是我们想像的只存放单个值,而是存放一组对象。在 OgnlValueStack 类里有一个 List 类型的 root 变量,就是使用他存放一组对象|-request|-applicationcontext|-OgnlValueStackroot 变量action,OgnlUtil,.|-session|-attr|-parameters在 root 变量中处于第一位的对象叫栈顶对象。通常我们在 OGNLS 达式里直接写上属性的名称即可访问 root 变量里对象的属性,搜索顺序是从栈顶对象开始寻找,如果栈顶对象不存在该属性,就会从第二个对象寻找,如果没有找到就从第三个对象寻找,
4、依次往下访问,直到找到为止。大家注意:Struts2 中,OGNLS 达式需要配合 Struts 标签才可以使用。如:3 .由于 ValueStack(值栈)是 Struts2 中 OGNL 勺根对象,如果用户需要访问值栈中的对象,在 JSP 页面可以直接通过下面的 EL 表达式访问 ValueStack(值栈)中对象的属性:$foo/获得值栈中某个对象的 foo 属性如果访问其他 Context 中的对象, 由于他们不是根对象, 所以在访问时, 需要添加#前缀。application 对象:用于访问 ServletContext,例如#application.userName 或#appli
5、cationuserName,相当于调用 ServletContext 的getAttribute(username)。session 对象:用来访问 HttpSession,例如#session.userName 或者#sessionuserName,相当于调用 session.getAttribute(userName)。request 对象:用来访问 HttpServletRequest 属性(attribute)的 Map 例如#request.userName 或者#requestuserName,相当于调用request.getAttribute(userName)。paramet
6、ers 对象:用于访问 HTTP 勺请求参数,例如#parameters.userName 或者#parametersuserName,相当于调用 request.getParameter(username)。attr 对象:用于按 page-request-session-application 顺序访问其属性。4 .为何使用 EL 表达式能够访问 valueStack 中对象的属性原因是 Struts2 对 HttpServletRequest 作了进一步的封装。简略代码如下:publicclassStrutsRequestWrapperextendsHttpServletRequestW
7、rapperpublicStrutsRequestWrapper(HttpServletRequestreq)super(req);publicObjectgetAttribute(Strings)ActionContextctx=ActionContext.getContext();Objectattribute=super.getAttribute(s);/先从 request 范围获取属性值if(ctx!=null)if(attribute=null)/如果从 request 范围没有找到属性值,即从ValueStack 中查找对象的属性值ValueStackstack=ctx.getV
8、alueStack();attribute=stack.findValue(s);returnattribute;5 .采用 OGNLg 达式创建 List/Map 集合对象如果需要一个集合元素的时候(例如 List对象或者 Map 对象),可以使用 OGNL 中同集合相关的表达式。使用如下代码直接生成一个 List 对象:生成一个 Map 对象:=Set 标签用于将某个值放入指定范围。scope:指定变量被放置的范围,该属性可以接受 application、sessionrequest、page 或 action。如果没有设置该属性,则默认放置在 OGNlContext中。value:赋给变
9、量的值.如果没有设置该属性,则将 ValueStack 栈顶的值赋给变量。6 .采用 OGNLS 达式判断对象是否存在于集合中对于集合类型,OGN 表达式可以使用 in 和 notin 两个元素符号。其中,in 表达式用来判断某个元素是否在指定的集合对象中;notin 判断某个元素是否不在指定的集合对象中,如下所示。in 表达式:在不在notin 表达式:不在在7.OGNL达式的投影功能除了 in 和 notin 之外,OGN 还允许使用某个规则获得集合对象的子集,常用的有以下 3 个相关操作符。?:获得所有符合逻辑的元素。A:获得符合逻辑的第一个元素。$:获得符合逻辑的最后一个元素。例如代码
10、:35-$在上面代码中,直接在集合后紧跟.运算符表明用于取出该集合的子集,内的表达式用于获取符合条件的元素,this 指的是为了从大集合 books 筛选数据到小集合,需要对大集合 books 进行迭代,this 代表当前迭代的元素。本例的表达式用于获取集合中价格大于 35 的书集合。publicclassBookActionextendsActionSupportprivateListbooks;OverridepublicStringexecute()books=newLinkedList();books.add(newBook(A735619678,spring,67);books.ad
11、d(newBook(B435555322,ejb3.0,15);8 .property 标签property 标签用于输出指定值:default:可选属性,如果需要输出的属性值为 null,则显示该属性指定的值escape:可选属性,指定是否格式化 HTML 弋码。value:可选属性, 指定需要输出的属性值, 如果没有指定该属性, 则默认输出 ValueStack栈顶的值。id:可选属性,指定该元素的标识9 .iterator 标签iterator 标签用于对集合进行迭代,这里的集合包含 List、Set 和数组。fontcolor=redbluevalue:可选属性,指定被迭代的集合,如果
12、没有设置该属性,则使用 ValueStack 栈顶的集合。id:可选属性,指定集合里元素的 id。status:可选属性,该属性指定迭代时的 IteratorStatus 实例。该实例包含如下几个方法:intgetCount()intgetIndex()booleanisEven()booleanisOdd()booleanisFirst()booleanisLast()返回当前迭代了几个元素返回当前迭代元素的索引,返回当前被迭代元素的索引是否是偶数,返回当前被迭代元素的索引是否是奇数,返回当前被迭代元素是否是第一个元素。,返回当前被迭代元素是否是最后一个元素。10.if/elseif/els
13、e 标签2321都不等10.url 标签生成类似如下路径:/struts/test/helloworld_add.action?personid=23红色部分为内容路径。一当标签的属性值作为字符串类型处理时,“%符号的用途是计算的值。输出结果:#myurlhttp:/OGN 威达式11.表单标签_checkboxlist 复选框如果集合为 list生成如下 html 代码:Java.NetRoRPHP如果集合为 MAP生成如下 html 代码:瑜珈用品户外用品球类自行车12 .表单标签_checkboxlist 复选框如果集合里存放的是 javabean%Personperson1=newPerson(1,第一个);Personperson2=newPerson(2,第二个);Listlist=newArrayList();list.add(person1);list.add(person2);request.setAttribute(persons,list);%Personid 和 namePerson 的属性生成如下 html 代码:第一个第二个13 .表单标签_ra
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030年中国数字显示拼接墙行业竞争状况及投资发展前景研究报告
- 个人廉洁教育心得体会
- 进行在线阅读教学设计及反思
- 餐厅服务员高级模拟考试题与参考答案
- 江西省宜春第九中学2025届高三最后一卷英语试卷含答案
- 2025届江西省奉新一中、南丰一中等六校重点中学高三下第一次测试英语试题含答案
- 江苏省扬州市扬州中学2024-2025学年高一下学期4月期中考试化学试题(原卷版+解析版)
- 海洋石油钻探深海资源探测技术考核试卷
- 森林改培技术对水资源节约利用的启示考核试卷
- 玩具行业的市场趋势预测考核试卷
- 华大新高考联盟2025届高三4月教学质量测评化学+答案
- 2025年中国防晒护理洗发露市场调查研究报告
- 2025-2030中国太阳能照明系统行业市场发展趋势与前景展望战略研究报告
- 国家电网招聘考试(金融类)专业考试历年真题及答案
- 2025年陕西省普通高中学业水平合格考试模拟卷(五)历史试题(含答案)
- 2025年有关“我为群众办实事”主题日活动工作方案
- 油气管道输送试题及答案
- 铁路雨季三防培训课件
- 2025-2030中国非邻苯二甲酸酯类增塑剂行业市场发展趋势与前景展望战略研究报告
- 2025年台球理论测试题及答案
- 2024-2025学年新教材高中数学 第4章 概率与统计 4.3 统计模型 4.3.1 第2课时 相关系数与非线性回归说课稿 新人教B版选择性必修第二册
评论
0/150
提交评论