Struts 2的标签库(1)——标签库基础

1.         为什么要使用标签?

当JSP页面嵌入大量的Java脚本时,整个页面的可读性下降,从而可读性也随之下降。

使用自定义标签的优势:简单;有利于团队协作;可读性高。

导入struts 2标签库:<%@taglib prefix=”s” uri=”/struts-tags”%>>

2.         Struts 2把所有的标签都定义在URI为“/struts-tags”的空间下,但是我们依然可以将Struts 2的标签简单的分为以下的3类:

1)        UI标签,即用户界面标签,主要用来生成HTML元素的标签

2)        非UI标签,主要用来数据访问、逻辑控制等标签

3)        Ajax标签

3.         Struts 2的OGNL表达式支持

OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言(Expression Language,简称为EL),通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。OGNL是通常要结合Struts 2的标志一起使用。主要是#、%和$这三个符号的使用。

l         “#”主要有三种用途:

  ①访问OGNL上下文和Action上下文,#相当于ActionContext.getContext();

  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属性,直到找到为止

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

  构造Map,语法结构#{key1:value1,key2:value2,……}。如#{'foo1':'bar1', 'foo2':'bar2'}。

l         “%”符号的用途是在标志的属性为字符串类型时,计算OGNL表达式的值。

l         “$”有两个主要的用途,用于在国际化资源文件中,引用OGNL表达式。

 

1)OGNL提供了两个元素符:in 和 out in,俩判断某个元素是否在指定的集合中。

如:

<s:if test=”’foo’ in {‘foo’,’bar’}”>
包含
</s:if>
<s:else>
不包含
</s:else>
<s:if test=”’foo’ not in {‘foo’,’bar’}”>
不包含
</s:if>
<s:else>
包含
</s:else>

2)除此之外,OGNL还允许通过某个规则取得集合的子集。有如下三个操作符:

①?   :取出所有符合选择逻辑的元素

②^    :取出所有选择逻辑的第一个元素

③$    :取出符合选择逻辑的最后一个元素

person.relatives.{? #this.gender == 'male'}

表示:取出person的所有性别为male的relatives集合。
3)OGNL访问静态成员

Struts 2默认是关闭访问静态方法的,只允许通过OGNL表达式来访问静态的Field。为了让OGNL能访问静态成员,应该在struts.xml中进行相应的设置:

<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>

一旦设置了,OGNL表达式就可以通过如下的语法来访问静态成员:

@className@staticField

@className@staticMethod(val...)

<body>
访问系统环境变量:<s:property value=
	"@java.lang.System@getenv('JAVA_HOME')"/> <br />
圆周率的值:<s:property value="@java.lang.Math@PI"/>
</body>


4)Lambda(λ)表达式

可以允许在OGNL中使用简单的函数,如:菲波拉契数列

if n==0 retrun 0;

else if n==1 return 1;

else return fib(n-2)+fib(n-1)

求fib(11)

<s:property value="#fib =:[#this==0 ? 0:#this==1 ? 1:#fib(#this-2)+#fib(#this-1)],#fib(11)"/>

上面的表达式可以输出fib(11)的值。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值