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范围。
- 一些用法:
Struts2自带的例子:<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”);
<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/>标签的使用:
- <s:url/>标签通常用来生成action路径,它与<c:url/>标签类似。
- <s:url action="testAction"/>在页面打印"/项目名/testAction.action"。也就是它与<c:url/>一样会生成全路径。而且无需给出后缀名,action属性的值只需和struts.xml文件中的<action name="testAction"/>name属性的相同就行。
- <s:url namespace="/" action="textAction"/>还可以指定名称空间。
- <s:url/>标签通常结合<s:param/>标签使用,来传递参数。例如:
<s:url action=”TestAction”> <s:param name=”name” value=”’张三’”/> </s:url>
- 页面打印结果:页面中打印为:/ognl/TestAction.action?name=%E5%BC%A0%E4%B8%89。通过URL传递参数。其中的中文通过URL编码。
- 其中的<s:param/>是用来作为子标签的,它的作用是指定参数。它的value属性为Ognl表达式,所以张三用单引号引起来,表示Ognl表达式的字符常量。
- <s:url/>常用参数说明
名称 必需 默认值 类型 说明 action 否 无 String 指定生成URL的action value 否 无 String 指定用于生成URL的地址值。
通常只使用action或value其中一个属性。
method 否 无 String 指定调用action中的方法。
如果使用的是value属性,那么该属性无效。
var 否 无 String 如果指定了该属性,那么生成的URL不会输出到页面中,
而是被保存到OgnlContext中。namespace 否 无 String 指定action的名称空间 forceAddSchemeHostAndPort
否 false Boolean 当该属性为true时,生成的URL为绝对路径,
而且会包含主机名及端口号。
<s:a/>标签的使用:
- 它用来生成超链接,与<s:url/>类似。
- 用法:
<s:a action=”TestAction” namespace=”/”>添加用户 <s:param name=”name” value=”’张三’”/> </s:a>
<s:debug/>标签的使用:
- 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 value="{'zhangSan','liSi','wangWu' }"> name: <s:property/><br/> </s: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():判断当前迭代的元素是否是最后一个元素。
- public int getCount():得到当前已经迭代的元素的总数。
- 示例代码的使用如下:(在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