1. 访问Action中的普通属性: <s:property value="loginname"/><br/>
  2. 访问Action中的对象属性: <s:property value="user.birthday"/><br/>
  3. 访问Action中的Set属性: <s:property value="courseSet.toArray()[0]"/><br/>
  4. 访问Action中的List属性: <s:property value="list[0]"/><br/>
  5. 访问Action中的Map属性的键: <s:property value="map.keys.toArray()[1]"/><br/>
  6. 访问Action中的Map属性的值: <s:property value="map.values.toArray()[1]"/><br/>
  7. 访问Action中的Map属性的指定键对应的值: <s:property value="map['z']"/><br/>
  8. 访问Action中的Map属性的大小: <s:property value="map.size"/><br/>
  9. <hr/>
  10. 访问ActionContext中的普通属性:<s:property value="#inte"/><br/>
  11. 访问ActionContext中的对象属性:<s:property value="#user2.loginname"/><br/>
  12. <hr/>
  13. 访问Action中的普通方法:<s:property value="getAppName()"/><br/>
  14. 访问ActionContext中的某个对象上的普通方法:<s:property value="#user2.info()"/><br/>
  15. <hr/>
  16. 访问静态属性:<s:property value="@java.lang.Math@PI"/><br/>
  17. 访问静态方法:<s:property value="@java.lang.Math@floor(44.56)"/><br/>
  18. 访问Math类中的静态方法:<s:property value="@@floor(44.56)"/><br/>
  19. <hr/>
  20. 调用java.util.Date的构造方法:<s:date name="new java.util.Date()" format="yyyy-MM-dd HH:mm:ss"/><br/>
  21. 调用java.util.Date的构造方法创建对象,再调用它的方法:<s:property value="new java.util.Date().getTime()"/><br/>
  22. <hr/>
  23. 投影查询:获取userList中所有loginname的列表:<s:property value="userList.{loginname}"/><br/>
  24. 选择查询:获取userList中所有score大于60的loginname列表:<s:property value="userList.{?#this.score>60.0}.{loginname}"/><br/>
  25. 选择查询:获取userList中所有score大于60并且gender为true的loginname列表:<s:property value="userList.{?(#this.score>60.0 && #this.gender)}.{loginname}"/><br/>
  26. 选择查询:获取userList中所有score大于60并且gender为true的第一个元素的loginname:<s:property value="userList.{^(#this.score>60.0 && #this.gender)}.{loginname}"/><br/>
  27. 选择查询:获取userList中所有score大于60并且gender为true的最后一个元素的loginname:<s:property value="userList.{$(#this.score>60.0 && #this.gender)}.{loginname}"/><br/>
  28. <hr/>
  29. 访问名为xxx的请求参数对应的第一个值:<s:property value="#parameters.xxx[0]"/><br/>
  30. 访问通过ActionContext中放入Request中的属性:<s:property value="#request.reqAtt"/><br/>
  31. 访问通过ServletActionContext中放入Request中的属性:<s:property value="#request.reqAtt2"/><br/>
  32. 访问通过ActionContext中放入Session中的属性:<s:property value="#session.sesAtt"/><br/>
  33. 访问通过ServletActionContext中放入Session中的属性:<s:property value="#session.sesAtt2"/><br/>
  34. 访问通过ActionContext中放入ServletContext中的属性:<s:property value="#application.appAtt"/><br/>
  35. 访问通过ServletActionContext中放入ServletContext中的属性:<s:property value="#application.appAtt2"/><br/>
  36. 直接访问属性域中指定名称的属性对应的值:<s:property value="#attr.sesAtt2"/><br/>
  37. <br/><br/><hr/>
  38. <s:iterator value="userList" status="vs">
  39. <s:if test="%{#vs.odd}">
  40. <span style="color: red">
  41. <s:property value="#vs.count"/>: <s:property value="loginname"/>,<s:date name="birthday" format="yyyy-MM-dd HH:mm:ss"/><br/>
  42. </span>
  43. </s:if>
  44. <s:else>
  45. <span style="color: blue">
  46. <s:property value="#vs.count"/>: <s:property value="loginname"/>,<s:date name="birthday" format="yyyy-MM-dd HH:mm:ss"/><br/>
  47. </span>
  48. </s:else>
  49. </s:iterator>
  50. <hr/><s:debug/>
  51. </body>
  52. </html></span></span>

总结:

在上边大家都好奇为什么都用struts的S标签,因为OGNL是通常要结合Struts 2的标志一起使用,如<s:property value="xx" />

Action类与JSP页面之间的数据传递

1) 通过HttpServletRequest,HttpSession,ServletContext来传递数据。

a) Action中传数据:在Action类的请求处理方法中先获取各个作用域对象

ServletActionContext.getRequest();

ServletActionContext.getRequest().getSession();

ServletActionContext.getServletContext();

然后调用相应的setAttribute(String "键", Object 值);

b) 在JSP页面中取数据:可以使用EL表达式或代码片段来取出对应作用域中属性值。

c) 页面中的请求参数传递到Action中时,Action中直接定义对应名称的属性,并提供setter方法即可封装此数据。

 2) 通过ActionContext实例来传递数据。 ActionContext针对每个正在执行Action的线程中绑定一份。

a) Action中通过ActionContext传递数据。

ActionContext提供了put(String "键", Object 值);  //数据不会映射到HttpServletRequest中。

ActionContext提供的getSession().put(String "键", Object 值);  //数据会自动映射到HttpSession中。

ActionContext提供的getApplication().put(String "键", Object 值); //数据会自动映射到ServletContext中。

b) 在JSP页面取数据:struts2推荐使用OGNL来取ActionContext中的数据。

1. Struts2中的OGNL的使用。

2. OGNL:对象图导航语言。通过OGNL表达式可以获取对象的属性,调用对象的方法,或构造出对象。

1) OGNL上下文中有一个根对象。这个根对象可以直接获取。不需要#。

2)支持常量:

字符串常量、字符常量、

数值常量:int、long、float、double

布尔常量:true、false

Null常量 : null

支持操作符:支持Java的所有操作符,还支持特有的操作符: ,、 {}、in、not in;

 Struts2中的OGNL:

1) Struts2将ActionContext设置为OGNL上下文,并将值栈(ValueStack)作为OGNL的根对象放置到ActionContext中。

2) Struts2总是把当前Action实例放置在值栈的栈顶。所以,在OGNL中引用Action中的属性也可以省略“#”。

常用标签

1) <s:property value="OGNL"/>

2) <s:date name="OGNL" format=""/>

3) <s:if test="OGNL"></s:if><s:elseif test="OGNL"></s:elseif><s:else></s:else>

★4) <s:iterator value="OGNL" status="vs">...</s:iterator>

5) <s:debug/>

struts2中#、%和$这三个符号的使用方法【摘自max struts2教程】 

一、"#"的用法

1、 访问OGNL上下文和Action上下文,#相当于ActionContext.getContext();下表有几个ActionContext中有用的属性:

parameters 包含当前HTTP请求参数的Map #parameters.id[0]作用相当于request.getParameter("id")

request 包含当前HttpServletRequest的属性(attribute)的Map #request.userName相当于request.getAttribute("userName")

session 包含当前HttpSession的属性(attribute)的Map #session.userName相当于session.getAttribute("userName")

application 包含当前应用的ServletContext的属性(attribute)的Map #application.userName相当于application.getAttribute("userName")

attr 用于按request > session > application顺序访问其属性(attribute) #attr.userName相当于按顺序在以上三个范围(scope)内读取userName属性,直到找到为止

2、用于过滤和投影(projecting)集合,如books.{?#this.price<100};

3、构造Map,如#{'foo1':'bar1', 'foo2':'bar2'}。

二、"%"的用法

“%”符号的用途是在标志的属性为字符串类型时,计算OGNL表达式的值。例如在Ognl.jsp中加入以下代码:

<h3>%的用途</h3>

<p><s:url value="#foobar['foo1']" /></p>

<p><s:url value="%{#foobar['foo1']}" /></p>

三、"$"的用法

1、用于在国际化资源文件中,引用OGNL表达式

2、在Struts 2配置文件中,引用OGNL表达式

例如:

<action name="AddPhoto" class="addPhoto">

<interceptor-ref name="fileUploadStack" />

<result type="redirect">ListPhotos.action?       albumId=${albumId}</result>

</action>

OGNL的使用的更多相关文章

  1. Struts2入门(五)——OGNL和标签库

    一.前言 OGNL和标签库的作用,粗暴一点说,就是减少在JSP页面中出现java代码,利于维护. 1.1.OGNL 1.1.1.什么是OGNL? OGNL(Object-Graph Navigatio ...

  2. Ognl表达式基本原理和使用方法

    Ognl表达式基本原理和使用方法 1.Ognl表达式语言 1.1.概述 OGNL表达式 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,他是一个 ...

  3. 4. ValueStack 和 OGNL

    1. 属性哪来的 当我们通过Action处理完用户请求以后,可以直接在页面中获取到 action 的属性值. 如果我们在页面中尝试遍历四个域中的属性,会发现域中并没有username之类的Action ...

  4. Struts2中的Ognl

    OGNL(Object-Graph Navigation Language)全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者调用对象的方法,能够遍历整 ...

  5. Struts2(Ognl)

    OGNL(Object-Graph Navigation Language)全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者调用对象的方法,能够遍历整 ...

  6. Strust OGNL详解

    首先了解下OGNL的概念: OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的 ...

  7. Struts2深入学习:OGNL表达式原理

    今天看了ognl表达式,不是很理解,准备以后再回头复习: http://developer.51cto.com/art/201203/322509.htm#case1

  8. Struts2的OGNL表达式语言

    一.OGNL的概念 OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者 ...

  9. Struts 2的OGNL的根对象

    Struts2中的OGNL表达式语言是对Xwork的OGNL的封装.我们要理解一下几点: 1. Struts2中将ActionContext作为OGNL的上下文环境(ActionContext内部含有 ...

随机推荐

  1. Linux C 信号 pause、sigsuspend 的相同与区别

    pause函数:       功能:让进程暂停直到信号出现   #include<unistd.h>      intpause();    函数说明:pause()会令目前的进程暂停(进 ...

  2. JQuery+Ajax+Struts2+Hibernate 实现完整的登录注册

    写在最前: 下午有招聘会,不想去,总觉得没有准备好,而且都是一些不对口的公司,可是又静不下心来,就来写个博客. 最近在仿造一个书城的网站:http://www.yousuu.com ,UI直接拿来用, ...

  3. Visual C++ 升级到 Visual Studio

    把项目从visual C++ MFC移到visual studio 2013有许多东西需要修改,尤其是工程本身不小的时候. 到最后一步的错误: error LNK2001: unresolved ex ...

  4. EST

    表达序列标签(expressed sequence tags,ESTs)是指从不同组织来源的cDNA序列.这一概念首次由Adams 等于1991年提出.近年来由此形成的技术路线被广泛应用于基因识别.绘 ...

  5. SpringMVC下Ajax请求的方法,@Responsebody如果返回的是布尔值,ajax不会接到任何回传数据

    SpringMVC框架下,如果用ajax向后台请求得方法如果使用@Responsebody返回布尔值的话,ajax得不到任何的回传数据. 但是如果返回String类型,就是正常的. 测试了下代码写得没 ...

  6. vim 常用命令逐渐熟悉以及常用的配置记录

    本篇博客记录的是我自己学习vim的常用命令的过程中,各个命令的逐渐熟悉的顺序(有一部分已经熟悉的命令没有列出),已经对vim编辑器本身的一些设置的记录 1.G 快速将光标切换到文件的最底部 2.u 撤 ...

  7. getPx function

    function getPX(str){  return str.substring(0,str.indexOf('px'));}

  8. Activity系列讲解---三大基本状态与七大生命周期函数

    简介:四大组件之一,在应用中一个Activity可以用来表示一个界面,可以理解为用户可视化界面,一个android应用必须通过Activity来运行和启动. 1.三大基本状态与七大生命周期函数 2.代 ...

  9. Windows Server 2012 R2桌面化详细设置图解

    一.任务栏左下角启动服务器管理器,然后进行设置. 1.登录不显示服务器管理器 2.本地服务器,看到右边的IE增强的安全配置,如图所示,关闭两项内容.这样就关闭了IE增强安全提示框. 3.“工具”菜单, ...

  10. WPF中运行时使内容可以上下左右被鼠标拖动应该怎么做?

    <Window x:Class="testGridSplitter.MainWindow" xmlns="http://schemas.microsoft.com/ ...