Javaweb学习之struts2标签库的使用

    Struts2标签库提供了主题、模板支持,极大地简化了视图页面的编写,而且,struts2的主题、模板都提供了很好的扩展性。实现了更好的代码复用。Struts2允许在页面中使用自定义组件,这完全能满足项目中页面显示复杂,多变的需求。 

    Struts2的标签库有一个巨大的改进之处,struts2标签库的标签不依赖于任何表现层技术,也就是说strtus2提供了大部分标签,可以在各种表现技术中使用。包括最常用的jsp页面,也可以说Velocity和FreeMarker等模板技术中的使用 

   包括:

   Struts2标签分类:

   控制标签:(if, elseif,else, iterator, append, merge, generator, subset, sort)

   数据标签:(bean, param,date, debug, include, set, url, push)

   OGNL:

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

   Struts2默认的表达式语言是OGNL

   OGNL的符号--#:

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

   2、构造Map

   用于过滤和投影(projecting)集合

   ?——所有匹配选择逻辑的元素

   ^——只提取符合选择逻辑的第一个元素

   $——只提取符合选择逻辑的最后一个元素

   Javaweb学习之struts2标签库的使用_第1张图片

   示例:parameters读取请求参数

<span style="font-size:18px;"><s:propertyvalue="#parameters.id"/></span>

   request读取request中的属性:

<span style="font-size:18px;"><s:propertyvalue="#request.r"/></span>

   session读取session中的属性

<span style="font-size:18px;"><s:propertyvalue="#session.s"/></span>

   application读取application中的属性:

<span style="font-size:18px;"><s:propertyvalue="#application.a"/></span>

attr request > session > application顺序访问其属性:

<span style="font-size:18px;"><s:propertyvalue="#attr.pc"/></span>

   范例:

<span style="font-size:18px;"><s:iterator value="#{'china':'中国','usa':'美国','e':'俄国'}"var="c">

<s:propertyvalue="#c.key"/>--<s:propertyvalue="#c.value"/><br/>

</s:iterator></span>

   范例:

<span style="font-size:18px;"><s:property value="#attr.list.{sname}[0]"/>
<s:propertyvalue="#attr.list.{$#this.sid== 3}.{sname}[0]"/>
</span>

   支持对象方法调用:

<span style="font-size:18px;"><s:propertyvalue="#attr.p.doSomeThing('李四')"/></span>

   调用保存在pageContext中的Student对象的doSomeThing()

   [N]语法:从ValueStack的第N个位置开始取值

   top关键字:取出最顶端的对象

   示例::

<span style="font-size:18px;">    <s:push value="'阿拉伯联合酋长国'">

    <s:propertyvalue="[0].top"/>

    </s:push></span>

   从ValueStack中的第0个位置开始取出最顶部的对象,返回为”阿拉伯联合酋长国”

   Struts2标签分类

   1.分类:

   Struts2标签库:用户界面标签库(表单/非表单标签库),非用户界面标签库(控制标签库,数据访问标签库),ajax支持标签库

   2.导入taglib

<span style="font-size:18px;"><%@taglib prefix=“s”uri=“/struts-tags”%></span>

   控制标签

   1、条件标签 if…elseif…else

   主要属性:test : 测试条件

    范例:

<span style="font-size:18px;"><%! Random rnd = newRandom(); %>

 <% int n =rnd.nextInt(200);pageContext.setAttribute("n", n); %>

 <s:if test="#attr.n % 7 == 0">恭喜,您中了一等奖!</s:if>

 <s:elseif test="#attr.n % 5==0">恭喜,您中了二等奖! </s:elseif>

 <s:else> 欢迎惠顾!</s:else></span>

   2、迭代标签 iterator

  用于循环数组,集合和Map

  属性:value:数组,集合或Map

  var:当前元素  status:当前元素的状态index,count,even,odd,first,last

  示例:

  遍历List

<s:iterator value="{'中华人民共和国', '美利坚合众国', '阿拉伯联合酋长国'}"var="cur"status="st">
   <s:property value="#st.count"/>
   <s:property value="#cur"/><br/>
 </s:iterator>

  遍历Map

<span style="font-size:18px;"> <s:iterator value="#{1: '中国', 2: '美国', 3: '日本'}"var="cur">
 <s:property value="#cur.key"/>
 <s:propertyvalue="#cur.value"/><br/>
 </s:iterator></span>

    3、集合合并标签 append和merge

     将多个集合合并成一个集合

    属性:  var -  新集合的名称

    示例:       

  <s:appendvar="newCollection">
  <s:param value="{'中国', '美国', '日本'}"></s:param>
  <s:param value="{'德国', '泰国', '新加坡'}"></s:param>
  </s:append>
<p><span style="font-family:KaiTi_GB2312;">  <s:iteratorvalue="#newCollection"var="cur"></span></p><p><span style="font-family:KaiTi_GB2312;">  <s:propertyvalue="#cur"/><br/></span></p><p><span style="font-family:KaiTi_GB2312;">  </s:iterator></span></p>

   注:merge用法和append相同,结果的组织不一样.

   4、字符串分割标签 generator

    将一个字符串按照指定分隔符分割成一个字符串数

  属性::

separator: 分隔符

val(value): 字符串

count:字符串數組中元素個數

示例:

<span style="font-size:18px;"><s:generatorseparator=","val="'中,华人,民共和,国'"var="arr"/>

<s:iteratorvalue="#arr"var="cur">

<s:property value="#cur"/><Br/>

</s:iterator></span>

5、集合子集标签  subset

 从集合中取出一个子集,注意:子集被放在值栈的顶部,subset标签执行完后子集自动移除

属性:

source: 集合  start: 起始索引 count: 子集中元素个数

示例:

<span style="font-size:18px;"><s:subset source="{'中国', '美国', '日本', '德国', '泰国', '新加坡'}"start="1"count="3">

<s:iterator  var="cur">

<s:property value="#cur"/>

</s:iterator>

</s:subset></span>

6、排序标签 sort

   根据定义的排序规则,对集合中的元素进行排序,排序后生成的新的集合放在值栈顶部,标签结束后自动删除.

属性::

comparator: 实现Comparator的类 source: 集合

 示例:

<span style="font-size:18px;"><s:beanname="com.aptech.sorted.LengthSorted"var="ls“/>

<s:sortcomparator="#ls"source="{'中1','88w','777','6666'}">

<s:iterator>

<s:property/><br/>

</s:iterator>

</s:sort></span>

数据标签

1、设置变量标签 set

用于设置一个新变量,并将新变量放入指定的作用域中

属性:Var: 新变量的引用  Value:值

示例:

<span style="font-size:18px;"><s:set var="v1"value="'中华人民共和国'"scope="page"></s:set>

<s:propertyvalue="#attr.v1"/></span>

注:如果不指定,默认放在Stack Context中

2、栈顶置值标签 push

将某个值置于值栈的顶部,标签结束后,将从值栈中移除.

属性:value: 即值

示例:

<span style="font-size:18px;"><s:push value="'中华人民共和国'">

<s:property/>

</s:push></span>

3、javabean创建标签 bean

用于创建javabean的实例,如果设置了var值,则存于Stack Context,否则,标签结束后自动移除.

属性:

name: javabean类名(带包)  var: 名称

示例:

<span style="font-size:18px;"><s:beanname="com.aptech.entity.Student"var="stu">

<s:paramname="sid">1</s:param>

<s:param name="sname">张三好</s:param>

<s:paramname="sbirthday">2009-9-9</s:param>

</s:bean>

<s:propertyvalue="#stu.sbirthday"/></span>

4、日期格式化标签 date 格式化日期并输出

属性:

name:日期 format:格式化字符串

示例:

<span style="font-size:18px;"><%pageContext.setAttribute("d",new Date()); %>

<s:datename="#attr.d"format="yyyy年MM月dd日 HH时mm分ss秒"/>

</span>

5、调试标签 debug

用于当前环境下Value Stack和stackcontext中保存的数据

6、资源包含标签 include

用于将一个html,jsp或servlet包含到当前页面中,使用param传递参数

属性:

value:包含页面名称

示例:

<span style="font-size:18px;"><s:includevalue="MyHtml.html"></s:include></span>

7、URL生成标签 url

生成URL地址,可以通过param标签传递请求参数,如果参数为中文,自动编码

属性:

value: url值

action: action名称,自动加上.action

示例:

<span style="font-size:18px;"> 
<s:urlvalue="control.jsp"var="url">

<s:param name="id">中华人民共和国</s:param>

</s:url>

<ahref="<s:propertyvalue="#url" />">链接</a>

<s:urlaction="test"var="url2"></s:url>

<s:property value="#url2"/</span>

8、数据输出标签 property

用于输出值栈,Stack Context中的数据

属性:


value:要输出的值


如果输出值栈中的值,不用#

如果输出Stack Context中的值,要用#

如果省略value,表示取出值栈的栈顶对象输出

总结:

OGNL是标签的基础,要理解OGNL的基本使用,在struts2中,OGNL必须和标签紧密配合

控制标签包含一组条件判断标签和一组集合遍历和操作标签

数据标签包含一组数据访问相关的标签

你可能感兴趣的:(Javaweb学习之struts2标签库的使用)