Struts标签和OGNL表达式

1.OGNL通过索引访问ValueStack中的对象。
[0].name
[1].name
上面使用的索引的方式并不是直接取得指定元素,而是从指定索引开始向下搜索。
访问ValueStack里的属性:${bar}
2.OGNL对非根对象属性的访问前要加#号
#foo.blash
Struts2的命名对象,他们与根对象无关,只是存在于Stack Context中,所以访问他们时需要使用#前缀来指明:
parameters对象:#parameters['foo'] 或 #parameters.foo
request对象:#request['foo'] 或 #request.foo
session对象:#session['foo'] 或 #session.foo
application对象
attr对象:按PageContext,request.session.ServletContext的顺序寻找对象
3.OGNL集合操作
生成List集合:{e1,e2,e2 ...}
生成Map集合:#{key1:value1,key2:value2 ...}
in 与 notin:
<s:if text="'foo' in {'foo','bar'}">...</s:if>
<s:if text="'foo' notin {'foo','bar'}">...</s:if>
获取集合子集:
person.relatives.{? #this.gender == 'male'} (问号可以替换为:^,$)
集合后紧跟.{}元素运算符用于取出集合的子集,而#this代表集合里的元素
4.如果为<s:iterator .../>标签指定status属性,即每次迭代时都会有一个IteratorStatus实例,该实例包含以下方法:getCount(),getIndex(),isEven(),isOdd(),isFirst(),isLast()
在OGNL表达式中可以通过 #st.odd, #st.count来访问,st为IteratorStatus的实例
5.使用iterator迭代Map对象:
<s:iterator value="集合对象" status="st">
    <s:property value="key"/><s:property value="value">
</s:iterator>
6.使用append标签将多个集合拼接成一个新集合,然后使用iterator进行迭代
<s:append id="newList">
    <s:param value="集合1"/>
    <s:param value="集合2"/>
</s:append>
<s:iterator value="#newList">...</s:iterator>
7.generator标签:分割字符串,生成的集合存放在ValueStack栈顶,在标签体中使用iterator迭代,不使用values属性(默认迭代ValueStack栈顶集合),标签结束,此集合即被删除。如果指定了此标签的id,则将临时生成的集合放置到pageContext属性中
<s:generator val="字符串">
    <s:iterator status="st">
        <s:property/> 个人理解:每次迭代都会把迭代元素放到ValueStack栈顶,使用完后即删除,<s:property/>默认去栈顶元素,去完删除,然后迭代下一个
    </s:iterator>
</s:generator>
8.做XXBean对象的编辑时,如医生编译,可以实例化一个医生对象,并设置相关属性,并将这个bean push到ValueStack中,跳转到相关页面。
9.struts2 token防止重复提交的原理:
首先,jsp页面在每次加载的时候都会生成一个新GUID,这个id会分别存放到页面隐藏域和Session中,当页面提交的时候,拦截器将对页面隐藏域中的id与session中的id进行对比,如果相同,则删除session中的id(等待再次请求页面时的再次创建),继续执行,完成后面的操作。但如果此时请求失败,用history.back(-1)返回时,页面中的id与session中已经不相同,再次提交就会出现重复提交的问题。这和F5刷新的道理一样,session中id被删除后,刷新页面,提交上来的id还是原来的id,而session中此时已没有id,判断提交失败!这才是token解决重复提交问题的原理。
10.struts2中ActionContext内置对象的作用(他们都是Map类型的集合):
parameters 包含当前Http请求参数的Map,也包含通过<s:param>标签传进的参数
#parameters.id[0]=request.getParameter("id")
request 包含当前HttpServletReqeust的属性(attribute)的Map
#reqeust.username=request.getAttribute("username");
session 包含当前HttpSession的属性的Map
#session.username=session.getAttribute("username");
application 包含当前ServletContext的属性的Map
#application.username=application.getAttribute("username");
attr 用于按request->session->application顺序访问其属性
11.在action中需要真正使用request,session,application对象是,action要实现ServletRequestAware, SessionAware, ServletContextAware接口

posted on 2010-03-15 14:57 macoo 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/macooma/archive/2010/03/15/1686240.html

Struts标签和OGNL表达式相关推荐

  1. Struts标签、Ognl表达式、el表达式、jstl标签库这四者之间的关系和各自作用

    来自:http://blog.csdn.net/love_you_99/article/details/8184797 一 介绍 1.Struts2的作用 Struts2标签库提供了主题.模板支持,极 ...

  2. Struts(十):OGNL表达式(一)

    Struts2 用s:porperty标签和OGNL表达式来读取值栈中的属性值: I.值栈中的属性值: 1.对象栈:读取对象栈中的某一个对象的属性值: 2.Map栈 :request,session, ...

  3. Struts 2的OGNL表达式

    来源:http://www.24xuexi.com/w/2011-04-26/88911.html Struts 2的OGNL表达式 标准的OGNL会设定一个根对象(root对象).假设使用标准OGN ...

  4. java ognl表达式 与struts2标签_Struts2 OGNL表达式实例详解

    Object Graph Navigation Language:对象图导航语言,就是用点来访问成员变量 例1: struts.xml: /ognl.jsp OgnlAction1.java: pac ...

  5. Struts(十一):OGNL表达式(二)

    Map栈 :request,session,application的一个属性值或一个请求参数的值. 若想访问ContextMap里的某个对象的属性,可以使用以下几种之一: #object.proper ...

  6. Struts2之OGNL表达式语言

    1.OGNL是Object-Graph Navigation Language的缩写,是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构 ...

  7. OGNL表达式的使用

    1.OGNL技术的使用 1).什么是OGNL 源于ognl.jar工具包     Object Graphics Navigation Language(对象图导航语言)    主要用于访问对象的数据 ...

  8. java actioncontext_struts2(四) ognl表达式、值栈、actionContext之间的关系

    今天来说说ognl表达式在struts2中的运用. --WZY 一.什么是Ognl? 通过百度百科查询到的解释,其中详细的说明了OGNL的作用. 下面我们就对OGNL这5个作用进行讲解 1.存取对象的 ...

  9. Struts2框架--学习笔记(下):OGNL表达式、值栈操作、拦截器、struts2标签、文件上传

    一.OGNL概述:OGNL是一种表达式 (1)在struts2中操作值栈数据. (2)一般把ognl在struts2中操作,和struts2标签一起使用操作值栈. (3)ognl不是strut2的一部 ...

最新文章

  1. HBase 性能优化笔记
  2. autofac 作用域_控制作用域和生命周期
  3. linux (centos)下安装 mongodb v3.2 笔记(启动的时候可以指定配置文件)
  4. gpa-user-guide-for-ubuntu-host
  5. STL中算法锦集(四)
  6. 一文带你学习DWS数据库用户权限设计与管理
  7. [导入]Asp.net 2.0 自定义控件开发[实现自动计算功能(AutoComputeControl)][示例代码下载]...
  8. 【VS】Installer Projects生成英文安装包
  9. Linux下的围棋软件,在Linux下和电脑下围棋
  10. 非负矩阵分解 NMF 总结
  11. html5 导航栏置顶,html5导航栏横向
  12. 小米手机通过USB连接电脑,共享使用电脑的网络
  13. SaaS、PaaS、LaaS以及之间的区别
  14. echarts按照时间显示柱状图_Echarts制作时间柱形离散分布图
  15. 2022-渗透测试-xss小游戏通关
  16. 基于Java的项目人力资源管理系统【附:源码课件】
  17. 最受程序员欢迎的图书推荐
  18. Android基础入门教程——8.3.18 Canvas API详解(Part 3)Matrix和drawBitmapMash
  19. 合作开发过程产生的专利_技术开发合同中的知识产权归属问题研究
  20. linux万兆网卡内核参数优化,Intel 万兆网卡82599问题

热门文章

  1. LAMP-----3、配置apache实现与php的整合
  2. HDU1283 最简单的计算机【模拟】
  3. 次数统计-CountMap
  4. window.parent ,window.top,window.self 详解
  5. 由VMWorld2010想到的Social Media宣传
  6. 学习 SQL 语句 - Select(7): 分组统计之 Avg()、Sum()、Max()、Min()、Count()
  7. BI中事实表和维度表的定义+具体SQL操作(转载+自己添加实验)
  8. django_mailgun.MailgunAPIError: Response [401]
  9. linux下面拷贝gbk编码的网页
  10. OpenCV学习笔记五-图像混合