详细解决方案
Struts2惯用标签之通用标签的使用
热度:232 发布时间:2013-10-06 18:25:14.0
Struts2常用标签之通用标签的使用
Struts2标签的分类:
- 通过struts2的文档可以查看到所有的标签:strust2\struts-2.3.7\docs\WW\tag-reference.html。
- 分为:Generic Tags(通用标签库)和UI Tags(UI标签库)。
Struts2通用标签库之数据标签:
- <s:property/>标签用来执行OGNL表达式,最为常用的方式是使用它在页面中输出ValueStack或ActionContext中的数据。<s:property value="#request.hello"/>等同于ActionContext.getContext().getRequest().get("hello");
- 参数说明:
名称 |
必需 |
默认值 |
类型 |
说明 |
default |
否 |
无 |
String |
表示默认值。当结果为null时,输出默认值。
|
escape |
否 |
true |
Boolean |
表示是否进行转义。该值为true时,当结果中包含<、>、”、’、&时,对其进行转义。 |
value |
否 |
栈顶对象 |
Object |
Ognl表达式 |
- 以下是Struts2自带的例子,如果想了解的更加详细。可以查看参考文档,也就是上面给出的,点击某个标签就行。
Examples
<s:push value="myBean">
<!-- Example 1: -->
<s:property value="myBeanProperty" />
<!-- Example 2: -->TextUtils
<s:property value="myBeanProperty" default="a default value" />
</s:push>
Example 1 prints the result of myBean's getMyBeanProperty() method.
Example 2 prints the result of myBean's getMyBeanProperty() method and if it is null, print 'a default value' instead.
<s:set/>标签的使用:
- <s:set/>标签用来创建一个变量,保存到指定的范围内。
- <s:set var="myVal" value="124" scope="name"/>,创建一个变量,保存到page范围,key为'myVal',值为‘name’运算后的值。
- 常用参数介绍:
-
名称 |
必需 |
默认值 |
类型 |
说明 |
var |
是 |
无 |
String |
变量的域名字,默认不是Ognl表达式
|
value |
否 |
栈顶对象 |
Object |
OGNL表达式 |
scope |
否 |
Action |
String |
变量的范围。可选值:application、session、request、page、action
|
- scope的可选值action是一个陌生的范围,它是scope的默认值。它表示保存到request和OgnlContext两个范围中。即比request范围多出了一个OgnlContext范围。
- 一些用法:
<s:set var=”myVar” value=”#parameters.score[0]” />
<s:property value=”#myVar”/>等同于ActionContext.getContext().get(“myVar”);
<s:property value=”#request.myVar”/>等同于ActionContext.getContext.getReuqest().get(“myVar”);
Struts2自带的例子:
<s:set name="personName" value="person.name"/>
Hello, <s:property value="#personName"/>. How are you?
<s:push/>标签的使用:
- <s:push/>标签是把指定值压入到值栈中,当执行完<s:push/>标签后,压入到值栈的值会被弹出。
- <s:push value="hello"/>相当于将'hello'压入值栈后,马上弹出,相当于什么都没做。
- <s:push value=”#session.user”>把user压入到值栈中
<s:property value=”username”/>打印值栈元素的username属性
<s:property value=”password”/>打印值栈元素的password属性
</s:push>把user从值栈中弹出
<s:url/>标签的使用:
- Debug标签用于调试,它在页面中生成一个"[Debug]"超连接,单击这个超链接,可以查看ValueStack和ActionContext中保存的所有对象。
Struts2通用标签之控制标签:
- 控制标签很好理解,就是流程控制了。例如if、elseif等,以及iterator等。
<s:if>、<s:elseif>、<s:else>
这种标签大家应该一看就会用了。我们直接给出个小例子看看。
<!―
在浏览器中输入:http://localhost:8080/tagtest/index.jsp?score=85
-->
<s:set name="score" value="#parameters.score[0]"/>
<s:property value="#score"/>:
<s:if test="#score > 100 || #score < 0">
<s:property value="'输入错误'"/>
</s:if>
<s:elseif test="#score >= 90">
<s:property value="'A'" />
</s:elseif>
<s:elseif test="#score >= 80">
<s:property value="'B'" />
</s:elseif>
<s:elseif test="#score >= 70">
<s:property value="'C'" />
</s:elseif>
<s:elseif test="#score >= 60">
<s:property value="'D'" />
</s:elseif>
<s:else>
<s:property value="'E'"/>
</s:else>
- <s:iterator/>标签可以用来迭代一个集合,可以迭代的的集合有:Collection、Map、Enumeration、Iterator或者是数组。iterator标签在迭代过程中,会把当前对象暂时压入值栈,这样在子标签中就可以直接访问当前对象的属性(因为当前对象在栈顶),在标签体执行完毕后,位于栈顶的对象就会被删除,在循环的第二圈时,把新的当前对象再压入值栈中。
- 如果为<s:iterator>标签指定了var属性,那么当前对象不只是压入到了值栈中,而且还会被添加到OgnlContext中。
<s:iterator value="{'zhangSan','liSi','wangWu' }" var="name">
name: <s:property value="#name"/><br/>
</s:iterator>
- <s:iterator/>标签常用参数介绍:
名称 |
必需 |
默认值 |
类型 |
说明 |
var |
否 |
无 |
String |
如果指定了该属性,
那么迭代的集合中的元素将被保存到OgnlContext中,
可以通过该属性的值来引用集合中的元素。该属性几乎不被使用。
|
value |
否 |
无 |
Coolection、
Map、
Enumeration、
Iterator 或数组
|
指定迭代的集合。
如果没有指定该属性,
那么iterator标签将把位于值栈栈顶的对象放入一个新创建的List中进行迭代。
|
status |
否 |
无 |
String |
如果指定了该属性,
一个IteratorStatus实例将被放入到OgnlContext中,
通过该实例可以获取迭代过程中的一些状态信息。 |
- IteratorStatus类在org.apahce.struts2.views.jsp包下。下面是对该类常用方法的介绍:
- public int getCount():得到当前已经迭代的元素的总数。
- public int getIndex():得到当前迭代的元素的索引。
- public boolean isEven():判断当前迭代的元素的个数是否是偶数。
- public boolean isOdd():判断当前迭代的元素的个数是否是奇数。
- public boolean isFirest():判断当前迭代的元素是否是第一个元素。
- public boolean isLast():判断当前迭代的元素是否是最后一个元素。
- 示例代码的使用如下:(在OGNL表达式中使用IteratorStatus类的方法时,可以直接使用:count、index、even、odd、first、last属性。)
<s:iterator value='{"one", "two", "three"}' status="status">
<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>
<hr/>
<s:iterator value="#{'1':'one','2':'two','3':'three','4':'four'}" status="st">
<s:property value="key"/>:<s:property value="value"/><br/>
</s:iterator