要在JSP中使用Struts 2.0标志,先要指明标志的引入。通过在JSP的代码的顶部加入以下代码可以做到这点。
<%@taglib prefix="s" uri="/struts-tags" %>
严格上来说,没有分类,所有标志都在URI为“/struts-tags”命名空间下,不过,我们可以从功能上将其分为两大类:非UI标志和UI标志。
[非UI标志]
1. if、elseif、else
<%@taglib prefix="s" uri="/struts-tags" %>
<body>
<h3>Condition Flow</h3>
<s:set name="name" value="<%= "'" + request.getParameter("name") + "'" %>" />
<s:if test="#name == 'Max'"> Max's file here </s:if>
<s:elseif test="#name == 'Scott'"> Scott's file her </s:elseif>
<s:else> Other's file here </s:else>
</body>
2. iterator ( 用于遍历集合(java.util.Collection)或枚举值(java.util.Iterator))
<%
List list = new ArrayList();
list.add("Max");
list.add("Scott");
list.add("Jeffry");
list.add("Joe");
list.add("Kelvin");
request.setAttribute("names", list);
%>
<html>
<body>
<h3>Names: </h3>
<!--
1、此处的空property元素用于获得当前iterator的值
2、status被设成stuts,在iterator的里面就可以通过#stuts取得IteratorStatus的对象。IteratorStatus类包含当前序号 信息,如是否第一个或最后一个,是否为奇数序号。这些信息在我们做格式化的时候,显得非常有用。
-->
<ol>
<s:iterator value="#request.names" status="stuts">
<s:if test="#stuts.odd == true"> <li>White <s:property /></li> </s:if>
<s:else> <li style="background-color:gray"><s:property /></li> </s:else>
</s:iterator>
</ol>
</body>
</html>
3. i18n (加载资源包到值堆栈。它可以允许text标志访问任何资源包的信息,而不只当前action相关联的资源包)
<body>
<h3>
<s:i18n name="ApplicationMessages">
<s:text name="HelloWorld" />
</s:i18n>
</h3>
</body>
4. include (包含一个servlet的输出(servlet或jsp的页面))
<body>
<h3>Interator Page</h3>
<s:include value="/condition.jsp">
<s:param name="name">Max</s:param>
</s:include>
<h3>i18n</h3>
<s:include value="/i18n.jsp" />
</body>
5. param (为其他标签提供参数,比如include标签和bean标签. 参数的name属性是可选的,如果提供,会调用Component的方法addParameter(String, Object), 如果不提供,则外层嵌套标签必须实现UnnamedParametric接口(如TextTag))
value的提供有两种方式,通过value属性或者标签中间的text,不同之处我们看一下例子
<param name=”color”>blue</param> <!—(A) -->
<param name=”color” value=”blue”></param> <!—(B) -->
(A)参数值会以String的格式放入statck.
(B)参数值会以java.lang.Object的格式放入statck.
6. set (set标签赋予变量一个特定范围内的值。当希望给一个变量赋一个复杂的表达式,每次访问该变量而不是复杂的表达式时用到。其在两种情况下非常有用: 复杂的表达式很耗时 (性能提升) 或者很难理解 (代码可读性提高)) (参考例子一)
7. text (支持国际化信息的标签。国际化信息必须放在一个和当前action同名的resource bundle中,如果没有找到相应message,tag body将被当作默认message,如果没有tag body,message的name会被作为默认message。) (参考例子三)
8. url (该标签用于创建url,可以通过"param"标签提供request参数。当includeParams的值时'all'或者'get', param标签中定义的参数将有优先权,也就是说其会覆盖其他同名参数的值)
<body>
<h3>URL</h3>
<a href='<s:url value="/i18n.jsp" />'>i18n</a><br />
<s:url id="url" value="/condition.jsp">
<s:param name="name">Max</s:param>
</s:url>
<s:a href="%{url}">if/elseif/else</s:a>
</body>
9. property (得到'value'的属性,如果value没提供,默认为堆栈顶端的元素) (参考例子二)
[UI标志]
UI标志又可以分为表单UI和非表单UI两部分。表单UI部分基本与Struts 1.x相同,都是对HTML表单元素的包装。不过,Struts 2.0加了几个我们经常在项目中用到的控件如:datepicker、doubleselect、timepicker、optiontransferselect等。因为这些标志很多都经常用到,而且参数也很多,要在一篇文章详细说明并非易事
要深入了解这些标志,可以到以下查看以下网址:
http://wiki.javascud.org/display/ww2cndoc/Tags WebWork2文档中文化计划(中文)
http://cwiki.apache.org/WW/tag-reference.html Tag Developers Guide(英文)。