常用标签及OGNL表达式

OGNL(Object-Graph Navigation Language)是一种功能强大的表达式语言(Expression Language,简称为EL),通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。

Struts2默认的表达式语言是OGNL,OGNL是通常要结合Struts2的标签一起使用,如<s:property value="xx" />就是结合了Struts标签和OGNL表达式。

在OGNL中,经常使用到#、%等符号,下面介绍一下这几个符号的使用方法。
***OGNL中#的使用
-访问Context~
#parameters.id[0]作用相当于request.getParameter("id")
#request.userName相当于request.getAttribute("userName")
#session.userName相当于session.getAttribute("userName")
#application.userName相当于application.getAttribute("userName")
#attr.userName相当于按request,session,application的顺序读取userName属性,直到找到为止

-用于过滤和投影(projecting)集合~
Action中存在一个名为books的Collection对象及其get方法
<s:iterator value="books.{?#this.price > 35}">
    <li><s:property value="title" /> - $<s:property value="price" /></li>
</s:iterator>
以上代码可以只输出book.price>35的信息,而不符合条件的对象将被过滤掉

-构造Map~
<s:set name="foobar" value="#{‘foo1‘:‘bar1‘, ‘foo2‘:‘bar2‘}" />
<p>The value of key "foo1" is <s:property value="#foobar[‘foo1‘]" /></p>

***OGNL中%的使用
在标志的属性为字符串类型时,计算OGNL表达式的值,例如
<s:textfield value="aa">
<s:textfield value="%{aa}">
生成的页面中,第一个input的value为aa,而第二个则为名字为aa的对象的值。

***简单文本 (property)
<s:property value="name">
将把Action中getName()的返回值以文本形式放到页面上
***输入框 (textfield)
<s:textfield label="%{getText(‘page1.name‘)}" name="user.name"/>
-label="%{getText(‘page1.name‘)}"~
在从Action定向到页面时,会以page1.name为key去对应locale的资源文件中取出值作为input的标签,
-name="user.name"~
在从Action定向到页面时,可以使Action.user.name的值作为input的value值,前提是要有user,name的get方法~
在页面提交至Action时,可以将input中的输入值作为参数来填充到Action.user.name中,前提是要有user,name的set方法。
***迭代器(iterator)
使用iterator标签可以对一个集合类型的对象进行迭代,例如在Action中定义一个List对象users及其get方法,存放了若干个User对象,User类有id属性及其get方法,Action转至jsp时可以使用
<s:iterator value="users">
     <s:property value="id"/>
</s:iterator>
就可以将users中的每个user的id进行输出~
<s:iterator value="users">
     <s:property/>
</s:iterator>
直接将每个user对象进行输出。

使用org.apache.struts2.util.Counter可以在不依赖Action中的集合对象情况下,实现简单的数字循环。
<s:bean name="org.apache.struts2.util.Counter" id="counter">
     <s:param name="first" value="10" />
     <s:param name="last" value="20" />
     <s:param name="interval" value="2"/>
     <s:iterator>
         <s:property value="current"/>
         <s:property/>
     </s:iterator>
</s:bean>
上面的例子中,first,last,interval的值可以是动态从Action获取的,从输出结果我们可以看出,<s:property/>输出每次迭代产生的值,而
<s:property value="current"/>=<s:property/>+interval
一个简单的分页程序
<s:bean name="org.apache.struts2.util.Counter" id="counter">
<s:param name="first" value="1" />
<s:param name="last" value="totalPNum" />
<s:iterator>
<s:if test="pno==current-1"><font color="red"><s:property/></font></s:if>
<s:else>
<s:url id="url" action="userlist">
<s:param name="pno" value="current-1" />
</s:url>
<s:a href="%{url}">[<s:property/>]</s:a>
</s:else>
</s:iterator>
</s:bean>
其中,Action提供总页数(totalPNum)和当前页(pno),迭代器在1-totalPNum之间迭代,如果迭代的数字等于pno,则输出简单的文本,否则,输出带页码参数的超链接。

时间: 2024-09-30 18:54:06

常用标签及OGNL表达式的相关文章

struts标签、OGNL表达式、JSTL标签、EL表达式

Struts标签.Ognl表达式.el表达式.jstl标签库这四者之间的关系和各自作用 我之前虽然会用,但是一直分不清彼此之间有什么区别,所以查找资料,将它们进行整合区分,加深了解, 一 介绍 1.Struts2的作用    Struts2标签库提供了主题.模板支持,极大地简化了视图页面的编写,而且,struts2的主题.模板都提供了很好的扩展性.实现了更好的代码复用.Struts2允许在页面中使用自定义组件,这完全能满足项目中页面显示复杂,多变的需求. Struts2的标签库有一个巨大的改进之

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

<转载> 我之前虽然会用,但是一直分不清彼此之间有什么区别,所以查找资料,将它们进行整合区分,加深了解, 一 介绍 1.Struts2的作用   Struts2标签库提供了主题.模板支持,极大地简化了视图页面的编写,而且,struts2的主题.模板都提供了很好的扩展性.实现了更好的代码复用.Struts2允许在页面中使用自定义组件,这完全能满足项目中页面显示复杂,多变的需求.Struts2的标签库有一个巨大的改进之处,struts2标签库的标签不依赖于任何表现层技术,也就是说strtus2提供

JavaWeb学习之JSP常用标签、EL表达式的运算符、JSTL标签库(6)

1.JSP常用标签 * 只要支持JSP文件,常用标签有可以直接使用 * 格式: jsp:xxxx * jsp:forward ,完成jsp页面的转发 * page属性:转发的地址 <% request.setCharacterEncoding("UTF-8"); %> <jsp:forward page="/index.jsp"> <jsp:param value="张三" name="userName&q

Struts2标签库汇总和OGNL表达式语言

Struts2标签分类 UI标签:主要用于生成HTML元素的标签 非UI标签:主要用于数据访问.逻辑控制的标签 Ajax标签:用于支持Ajax的标签 表单标签(属于UI标签):用于生成HTML页面的form标签及普通表单元素的标签 非表单标签(属于UI标签):用于生产页面上的树.Tab页等标签 流程控制标签(属于非UI标签):主要包含用于实现分支.循环等流程控制的标签 数据访问标签(属于非UI标签):主要包含用于操作值栈和完成国际化功能的标签. OGNL表达式语言 (Object-Graph N

Struts2之OGNL表达式语言

1.OGNL是Object-Graph Navigation Language的缩写,是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能.其中OGNL用得最多的地方就是和Struts2的标签绑定,也可以在配置文件中通过${}使用OGNL表达式. 2.OGNL表达式中有几个常用的符号,下面介绍这三种符号的使用: (1).OGNL中$号的使用:第一种,可以在国际化资源文件中引用OGNL表达式.第二种,可以在st

struts2(六)之ognl表达式与ActionContext、ValueStack

前言 前面已经把struts2讲内容说了一半了,我写的很详细,希望对博友们有帮助. 一.OGNL表达式语言概述 1.1.OGNL表达式简介 百度上是这样说: OGNL是Object-Graph Navigation Language的缩写,它是一个单独的开源项目.Struts2框架使用OGNL作为默认的表达式语言. 它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的 结构图,实现字段类型转化等功能.它使用相同的表达式去存取对象的属性.

Struts(十):OGNL表达式

Struts2 用s:porperty标签和OGNL表达式来读取值栈中的属性值: I.值栈中的属性值: 1.对象栈:读取对象栈中的某一个对象的属性值: 2.Map栈 :request,session,application的一个属性值或一个请求参数的值. II.读取对象栈(ObjectStack)中的对象属性: 1.若想读取Object Stack里的某个对象的属性,可以通过以下集中形式之一: object.propertyname object['propertyname'] object["

【Struts2五】ValueStack以及ognl表达式二(常用标签)

Ognl常用标签:  1.s:debug 如果把该标签放入到s:iterator中可以看到当前正在迭代的元素的状态   2.s:property 1.输出 2.value属性:值能直接跟ognl表达式 3.如果value属性不写,则默认输出栈顶的元素    3:s:iterator标签 (1).iterator迭代Collection,Map,Object[],还可以以组合的形式迭代 (2).当前正在迭代的元素在栈顶 (3).如果value属性不写,则默认迭代栈顶的元素 (4).如果迭代的是ma

OGNL表达式struts2标签“%,#,$”

一.什么是OGNL,有什么特点? OGNL(Object-Graph Navigation Language),大概可以理解为:对象图形化导航语言.是一种可以方便地操作对象属性的开源表达式语言.OGNL有如下特点: 1.支持对象方法调用,形式如:objName.methodName(): 2.支持类静态的方法调用和值访问,表达式的格式为@[类全名(包括包路)]@[方法名 |  值名],例如: @java.lang.String@format('foo %s', 'bar')或@tutorial.