Struts2笔记五之Struts标签

来源:互联网 发布:河北网络电视台官网 编辑:程序博客网 时间:2024/06/05 18:42
1、页面使用Struts标签需要引入<%@taglib uri="/struts-tags" prefix="s" %>


2、Struts2标签简介
1.通用标签
1) property
2) set
a)默认为action scope, 会将值放入reques和ActionContext中。
b)page,request,session,application
3)bean
4)include对中文文件支持有问题,不建议使用,如需包含,改用jsp包含
5)param
6)debug

2.控制标签
1)if elseif else
2)iterator
collection map enumeration iterator array
3)subset

3.$#%的区别
1)$用于i18n和struts配置文件
2)#取得ACtionContext的值
3)%将原本的文本属性解析为ognl,对于本来就是obnl的属性不起作用
参考<s:property>和<s:include>


3、详细说明:
1.<s:property>标签
<!-- 这里的username是ognl表达式 -->
property: <s:property value="username"/>
<!-- 这里的username是String字符串 -->
property 取值为字符串: <s:property value="'username'"/>
<!-- 从值栈中取admin,取到值,就用这个值,如果取不到,就用默认值"管理员" -->
property 设定默认值: <s:property value="admin" default="管理员"/>
<!-- escape默认是true,如果为true,那么value中的<hr/>会作为字符串在页面上显示,如果设置为false,那么会以html格式输出 -->
property 设定HTML: <s:property value="'<hr/>'" escape="false"/>


2.<s:set>标签
<!-- 这里定义了一个变量adminName,值为username的Object,范围是request和ActionContext -->
set 设定adminName值(默认为request 和 ActionContext): <s:set var="adminName" value="username" />
set 从request取值: <s:property value="#request.adminName" />
set 从ActionContext取值: <s:property value="#adminName" />
<!-- set的5个范围 application、session、request、page和action,以下是比较老的写法,name已经被废弃了,现在只用var-->
set 设定范围: <s:set name="adminPassword" value="password" scope="page"/>
set 从相应范围取值: <%=pageContext.getAttribute("adminPassword") %>
<!-- 定义一个变量adminPassword,value为password,范围为session -->
set 设定var,范围为ActionContext: <s:set var="adminPassword" value="password" scope="session"/>
<!-- #取值是从ActionContext,因为如果不设定范围会默认放入ActionContext,故可以直接#从ActionContext取值 -->
set 使用#取值: <s:property value="#adminPassword"/>
<!-- 如果设置了范围,#直接取值就取不到了,需要从范围中取值 -->
set 从相应范围取值: <s:property value="#session.adminPassword"/>


3.<s:bean>标签
bean 定义bean,并使用param来设定新的属性值,下面这句话表示new了一个新的Dog对象,但是需要赋值给变量var,否则这个对象在</s:bean>这里就消失了,
所以不设置var,但要用到这个对象需要在<s:bean>里面赋值和取值使用。
<s:bean name="com.edifier.struts2.tags.Dog" >
<s:param name="name" value="'pp'"></s:param>
<s:property value="name"/>
</s:bean>
下面这句话表示new了一个新的Dog对象,并赋值给变量myDog,存放在ActionContext里面
<s:bean name="com.edifier.struts2.tags.Dog" var="myDog">
<!-- name对应的name是Dog类中的属性,给其赋值为oudy,为了防止oudy被认为是ognl表达式,应该写成'oudy'这样就是字符串了。 -->
<s:param name="name" value="'oudy'"></s:param>
</s:bean>
拿出值:
<s:property value="#myDog.name"/>

4.<s:include>标签(少用,因为对于引入中文文件会出问题。)
include _include1.html 包含静态英文文件
<s:include value="/_include1.html"></s:include>
include _include2.html 包含静态中文文件
<s:include value="/_include2.html"></s:include>
include _include1.html 包含静态英文文件,说明%用法%{}强制将花括号里面的内容转换为ognl表达式
<s:set var="incPage" value="'/_include1.html'" />
<s:include value="%{#incPage}"></s:include>


5.<s:if>,<s:elseif>,<s:else>标签
if elseif else和java中的用法基本一样test中写需要判断的内容
age = <s:property value="#parameters.age[0]" /> <br />
<s:set var="age" value="#parameters.age[0]" /> <!-- 这里利用s:set将#parameters.age[0]换一个名字方便调用 -->
<s:if test="#age < 0">wrong age!</s:if>
<s:elseif test="#parameters.age[0] < 20"> too young! </s:elseif>
<s:else> yeah! </s:else> <br />
<s:if test="#parameters.aaa == null"> null </s:if>


6.<s:iterator>标签
遍历集合:
<s:iterator value="{1, 2, 3}" > <!-- 在ognl表达式中{}表达集合 -->
<s:property/> |
</s:iterator>
要用<s:iterator>遍历集合很简单,value中存放集合,然后用<s:property/>依次取值


自定义变量,将取出来的每一个值放在变量x中,因为x(x为ognl表达式)是字符串所以可以调用toUpperCase()方法变成大写
<s:iterator value="{'aaa', 'bbb', 'ccc'}" var="x">
<s:property value="#x.toUpperCase()"/> |
</s:iterator>


使用status,status表示状态,即每次循环的一些状态
<s:iterator value="{'aaa', 'bbb', 'ccc'}" status="status">
<s:property/> | 
遍历过的元素总数,循环了多少次:<s:property value="#status.count"/> |
遍历过的元素索引,当前取出的是第几个:<s:property value="#status.index"/> |
当前是偶数?当前表示循环了几次:<s:property value="#status.even"/> |
当前是奇数?当前表示循环了几次:<s:property value="#status.odd"/> |
是第一个元素吗?: <s:property value="#status.first"/> |
是最后一个元素吗?: <s:property value="#status.last"/>
<br />
</s:iterator>


ognl表达式定义Map格式为:#{1:'a', 2:'b', 3:'c'},#{key:value,key:value,key:value...}
iterator遍历Map 1
<s:iterator value="#{1:'a', 2:'b', 3:'c'}" >
<s:property value="key"/> | <s:property value="value"/> <br />
</s:iterator>
iterator遍历Map 2
<s:iterator value="#{1:'a', 2:'b', 3:'c'}" var="x">
<s:property value="#x.key"/> | <s:property value="#x.value"/> <br />
</s:iterator>
0 0
原创粉丝点击