论 <%@taglib prefix="s" uri="/struts-tags" %> 的重要性

前段时间在做项目的时候,碰到这个问题

结果是相应的内容显示不出来,原来是忘了这句很关键的引入:<%@taglib prefix="s" uri="/struts-tags" %>

1,Struts2只有一个标签库s

引入它的方式为:<%@taglib prefix="s" uri="/struts-tags"%>

Struts2的标签不依赖于任何表现层技术,也就是说,Struts2提供的大部分标签,可以在各种表现层技术中使用,包括最常用的JSP页面,也可以在Velocity和FreeMarker等模块技术中使用。

2、Struts2的控制标签用法介绍

控制标签可以完成输出流程控制,例如分支,循环等操作,也可以完成对集合的合并,排序等操作。

1,if/elseif/else标签

只有if标签可以单独使用,其它两个要与if组合才能使用。

 1 contentType="text/html; charset=GBK" language="java"%>
 2 <%@taglib prefix="s" uri="/struts-tags"%>
 3 <html>
 4 <head>
 5 <title>s:if标签测试</title>
 6 </head>
 7 <body>
 8 <s:set name="age" value="29"/>
 9 <s:if test="${age > 60}">
10     老年人
11 </s:if>
12 <s:elseif test="${age > 35}">
13     中年人
14 </s:elseif>
15 <s:elseif test="${age > 15}" id="wawa">
16 青年人
17 </s:elseif>
18 <s:else>
19     少年
20 </s:else>
21 </body>
22 </html>

2,iterator标签

     iterator迭代List代码如下:

 1 <%@ page contentType="text/html; charset=GBK" language="java"%>
 2 <%@taglib prefix="s" uri="/struts-tags"%>
 3 <html>
 4 <head>
 5 <title>使用s:itertor标签迭代List</title>
 6 </head>
 7 <body>
 8 <table border="1" width="200">
 9 <s:iterator value="{‘Spring2.0‘,‘J2EE‘,‘Ajax‘}" id="name">
10 <tr>
11    <td><s:property value="#st.count"/><s:property value="name"/></td>
12 </tr>
13 </s:iterator>
14 </table>
15 </body>
16 </html>

   还可以在迭代时根据迭代元素的属性来进行更多的控制。看如下代码:

 1 <%@ page contentType="text/html; charset=GBK" language="java"%>
 2 <%@taglib prefix="s" uri="/struts-tags"%>
 3 <html>
 4 <head>
 5 <title>使用s:itertor标签迭代List</title>
 6 </head>
 7 <body>
 8 <table border="1" width="200">
 9 <s:iterator value="{‘Spring2.0‘,‘J2EE‘,‘Ajax‘}" id="name" status="st">
10 <tr <s:if test="#st.odd">style="background-color:#bbbbbb"</s:if>>
11    <td><s:property value="name"/></td>
12 </tr>
13 </s:iterator>
14 </table>
15 </body>
16 </html>

   iterator迭代Map代码如下:

 1 <%@ page contentType="text/html; charset=GBK" language="java"%>
 2 <%@taglib prefix="s" uri="/struts-tags"%>
 3 <html>
 4 <head>
 5 <title>使用s:itertor标签迭代Map</title>
 6 </head>
 7 <body>
 8 <table border="1" width="240">
 9 <tr>
10    <th>书名</th>
11    <th>作者</th>
12 </tr>
13 <s:iterator value="#{‘Spring2.0:‘李‘ , ‘J2EE‘:‘李‘,‘Ajax‘:‘李‘}" id="score" status="st">
14 <tr <s:if test="#st.odd">style="background-color:#bbbbbb"</s:if>>
15    <td><s:property value="key"/></td>
16    <td><s:property value="value"/></td>
17 </tr>
18 </s:iterator>
19 </table>
20 </body>
21 </html>

   append标签

append标签可以将多个集合对象拼接起来,组成一个新的集合。拼接后,从而允许通过一个iterator标签就可以完成对多个集合的迭代。

   append对多个List对象的拼接

 1 <%@ page contentType="text/html; charset=GBK" language="java"%>
 2 <%@taglib prefix="s" uri="/struts-tags"%>
 3 <html>
 4 <head>
 5 <title>使用s:append标签拼接两个集合</title>
 6 </head>
 7 <body>
 8 <s:append id="newList">
 9 <s:param value="{‘Spring2.0‘,‘J2EE‘,‘Ajax‘}" />
10 <s:param value="{‘培训‘, ‘职业教育‘}" />
11 </s:append>
12
13 <table border="1" width="240">
14 <s:iterator value="#newList" status="st">
15 <tr <s:if test="#st.odd">style="background-color:#bbbbbb"</s:if>>
16    <td><s:property/></td>
17 </tr>
18 </s:iterator>
19 </table>
20 </body>
21 </html>

 append还可以拼接多个Map对象,还可以将Map和List混合拼接,见如下代码:

 1 <%@ page contentType="text/html; charset=GBK" language="java"%>
 2 <%@taglib prefix="s" uri="/struts-tags"%>
 3 <html>
 4 <head>
 5 <title>使用s:append标签拼接集合和Map</title>
 6 </head>
 7 <body>
 8 <s:append id="newList">
 9 <s:param value="#{‘Spring2.0‘:‘李‘,‘J2EE‘:‘李‘,‘Ajax‘:‘李‘}" />
10 <s:param value="#{‘培训‘, ‘职业教育‘}" />
11 </s:append>
12
13 <table border="1" width="240">
14 <s:iterator value="#newList" status="st">
15 <tr <s:if test="#st.odd">style="background-color:#bbbbbb"</s:if>>
16    <td><s:property value="key"/></td>
17    <td><s:property value="value"/></td>
18
19 </tr>
20 </s:iterator>
21 </table>
22 </body>
23 </html>

generator标签

使用generator标签可以将指定的字符串按指定分隔符隔成多个子串,临时生成的多个子串可以使用iterator标签来进行迭代输出。临时生成的集合将在此标签内部有效,出了标签就消亡。该标签有几个有用的属性,介绍如下:

id:这是一个可选属性,指定id后,则生成的标签在pageContext属性中

count:这是一个可选属性,该属性指定生成集合中元素的总数,多余的丢弃

separator:这是一个必填属性,指定用于解析的分隔符

 1 <%@ page contentType="text/html; charset=GBK" language="java"%>
 2 <%@taglib prefix="s" uri="/struts-tags"%>
 3 <html>
 4 <head>
 5 <title>使用s:generator生成集合</title>
 6 </head>
 7 <body>
 8 <table border="1" width="240">
 9 <s:generator val="‘Spring2.0,J2EE,Ajax‘" separator=",">
10 <s:iterator status="st">
11 <tr <s:if test="#st.odd">style="background-color:#bbbbbb"</s:if>>
12    <td><s:property/></td>
13 </tr>
14 </s:iterator>
15 </s:generator>
16 </table>
17 </body>
18 </html>

指定id和count后使用方式如下:

 1 <%@ page contentType="text/html; charset=GBK" language="java"%>
 2 <%@taglib prefix="s" uri="/struts-tags"%>
 3 <html>
 4 <head>
 5 <title>使用s:generator生成集合</title>
 6 </head>
 7 <body>
 8 <s:generator val="‘Spring2.0,J2EE,Ajax‘"
 9 separator="," id="books" count="2"/>
10 <table border="1" width="240">
11 <%
12 java.util.Iterator i = (java.util.Iterator) pageContext.getAttribute("books");
13 while(i.hasNext())
14 {
15    String s = (String) i.next(); %>
16    <tr>
17    <td><%=s%></td>
18    </tr>
19 <%
20 }
21 %>
22 </table>
23 </body>
24 </html>

merge标签

merge标签同样用于将多个集合元素拼接成一个集合元素。它的用法和功能同append很相似,只是生成的元素内容的顺序不同。

 1 <%@ page contentType="text/html; charset=GBK" language="java"%>
 2 <%@taglib prefix="s" uri="/struts-tags"%>
 3 <html>
 4 <head>
 5 <title>使用s:merge标签迭代Map</title>
 6 </head>
 7 <body>
 8 <s:merge id="newList">
 9 <s:param value="#{‘Spring2.0‘:‘李‘,‘J2EE‘:‘李‘,‘Ajax‘:‘李‘}" />
10 <s:param value="#{‘培训‘, ‘职业教育‘}" />
11 </s:merge>
12
13 <table border="1" width="240">
14 <s:iterator value="#newList" status="st">
15 <tr <s:if test="#st.odd">style="background-color:#bbbbbb"</s:if>>
16    <td><s:property value="key"/></td>
17    <td><s:property value="value"/></td>
18
19 </tr>
20 </s:iterator>
21 </table>
22 </body>
23 </html>

subset标签

subset标签用于取得集合的子集,该标签的底层通过org.apache.Struts2.util.Subset.IteratorFilter类提供实现。使用subset标签可以指定如下几个属性:

count:可选属性,指定子集中元素的个数,默认取得源集合的所有元素

source:可选属性,指定源集合,如果不指定,默认取得valueStack栈顶的集合,一般都会指定

start:可选属性,指定从源集合的第几个元素开始截取,,默认从第一个元素(即start=0)开始

decider:可选属性,由开发者自己决定是否选中该元素

一般用法如下:

 1 <%@ page contentType="text/html; charset=GBK" language="java"%>
 2 <%@taglib prefix="s" uri="/struts-tags"%>
 3 <html>
 4 <head>
 5 <title>使用s:subset标签截取集合元素</title>
 6 </head>
 7 <body>
 8 <table border="1" width="200">
 9 <s:subset source="{‘Java‘,‘Spring2.0‘,‘J2EE‘,‘Ajax‘,‘WebWork‘}"
10 start="1" count="3">
11 <s:iterator status="st">
12 <tr <s:if test="#st.odd">style="background-color:#bbbbbb"</s:if>>
13    <td><s:property/></td>
14 </tr>
15 </s:iterator>
16 </s:subset>
17 </table>
18 </body>
19 </html>

上面的代码的source属性指定的集合包含了5个元素,通过subset从第2个元素开始截取,只取出其中3个元素。

此外,Struts2还允许开发者决定截取标准,开发者只需要实现一个Decider类,实现SubsetIteratorFilter.Decider接口中的boolean decide(Object element)方法,如果该方法返回真,则表明该元素将被选入子集中。看如下代码:

package lee;

import org.apache.struts2.util.SubsetIteratorFilter;
public class MyDecider implements SubsetIteratorFilter.Decider
{
public boolean decide(Object element) throws Exception
{
   String str = (String)element;
   return str.indexOf("J2EE") > 0;
}
}

这里要求过滤不包含“J2EE”的元素,JSP页面代码如下:

 1 <%@ page contentType="text/html; charset=GBK" language="java"%>
 2 <%@taglib prefix="s" uri="/struts-tags"%>
 3 <html>
 4 <head>
 5 <title>使用s:subset标签截取集合元素</title>
 6 </head>
 7 <body>
 8 <s:bean id="mydecider" name="lee.MyDecider"/>
 9 <table border="1" width="200">
10 <s:subset
11 source="{‘Java‘,‘Spring2.0‘,‘J2EE‘,‘Ajax‘,‘WebWork‘}"
12 decider="#mydecider">
13 <s:iterator status="st">
14 <tr <s:if test="#st.odd">style="background-color:#bbbbbb"</s:if>>
15    <td><s:property/></td>
16 </tr>
17 </s:iterator>
18 </s:subset>
19 </table>
20 </body>
21 </html>

Sort标签

sort标签用于对指定的集合元素进行排序,进行排序时,必须提供自己的排序规则,即实现自己的Comparator,需要实现java.util.Comparator接口。使用sort标签时可指定如下几个属性:

comparator:必填属性,指定排序的Comparator实例

source:可选属性,指定被排序的集合,如果不指定则对valueStack栈顶的集合进行排序

JAVA代码如下:

 1 package lee;
 2
 3 import java.util.Comparator;
 4 public class MyComparator implements Comparator
 5 {
 6 public int compare(Object element1, Object element2)
 7 {
 8    return element1.toString().length() - element2.toString().length();
 9 }
10 }

上面的方法,如果返回一个大于0的数,则第一个元素大于第二个元素;返回0则表示两个元素相等,返回小于0的数,则第一个元素小于第二个元素。

JSP页面如下:

 1 <%@ page contentType="text/html; charset=GBK" language="java"%>
 2 <%@taglib prefix="s" uri="/struts-tags"%>
 3 <html>
 4 <head>
 5 <title>使用s:sort对集合元素进行排序</title>
 6 </head>
 7 <body>
 8 <s:bean id="mycomparator" name="lee.MyComparator"/>
 9 <table border="1" width="200">
10 <s:sort
11 source="{‘J2EE‘,‘Ajax‘,‘Spring2.0‘}"
12 comparator="#mycomparator">
13 <s:iterator status="st">
14 <tr <s:if test="#st.odd">style="background-color:#bbbbbb"</s:if>>
15    <td><s:property/></td>
16 </tr>
17 </s:iterator>
18 </s:sort>
19 </table>
20 </body>
21 </html>
时间: 2024-10-29 04:01:19

论 <%@taglib prefix="s" uri="/struts-tags" %> 的重要性的相关文章

taglib prefix="s" uri="/struts-tags"

这一句<%@ taglib prefix="s" uri="/struts-tags" %>就是从地址/struts-tags下面寻找标签库,可能有人会好奇这个地址在哪里呢?答案是它定义在Struts 2库文件struts2-core-2.0.11.jar里面的文件META-INF/struts-tags.tld里面,在这个文件的开头有这么一段代码: <?xml version="1.0" encoding="UTF-

This is usually caused by using Struts tags without the associated filter.

1.错误描述 严重: Servlet.service() for servlet [jsp] in context with path [/SendMail] threw exception [An exception occurred processing JSP page /pages/fileupload/fileUpload.jsp at line 42 39: <table> 40: <tr> 41: <td> 42: <s:fielderror css

struts(tags)

Struts2-tags 通用标签: property 默认的value 的类型为object,只要是object  类型都会被解析成ognl表达式,但是如果只想传递一个普通的字符串需要加'' ;example <s:property value="username" />会被解析成ognl表达式 <s:proerty value="'username'" />此时的username就是一个普通的字符串 设定默认值: <s:proper

自定义标签文件(二)

开发自定义标签,实现标准标签c:foreach相同的功能.以下是关键代码: 实现迭代的标签处理类ForeachTag.java 1 package com.abc; 2 3 import java.io.IOException; 4 import java.lang.reflect.Array; 5 import java.util.*; 6 7 import javax.servlet.jsp.JspException; 8 import javax.servlet.jsp.tagext.Si

Struts2(XWork)拦截器的功能介绍:

  拦截器 名字 说明 Alias Interceptor alias 在不同请求之间将请求参数在不同名字件转换,请求内容不变 Chaining Interceptor chain 让前一个Action的属性可以被后一个Action访问,现在和chain类型的result(<result type="chain">)结合使用. Checkbox Interceptor checkbox 添加了checkbox自动处理代码,将没有选中的checkbox的内容设定为false,

在EL表达式或者Struts标签库中格式化日期对象,即将Date转换为yyyy-MM-dd格式

一.EL表达式 首先,在jsp页面引入<fmt> tags,<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>. 其次,将EL表达式作为fmt标签属性的value值.再增加pattern参数,为日期制定需要格式化的格式,如yyyy-MM-dd.例如: <fmt:formatDate value="${object.dateproperty}&quo

struts的异常处理

异常信息:The Struts dispatcher cannot be found.  This is usually caused by using Struts tags without the associated filter. Struts tags are only usable when the request has passed through its servlet filter, which initializes the Struts dispatcher needed

struts 的 crud

1.导入相关的pom依赖(struts.自定义标签库的依赖) 2.分页的tag类导入.mytag.tld.完成web.xml的配置 3.dao层去访问数据 4.web层去调用dao层给前台返回数据 5.在struts_sy.xml进行配置 6.写jsp pom依赖 <!-- 5.3.jstl.standard --> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifac

struts入门实例

创建maven web项目 配置pom.xml 加入struts的依赖包 <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.5.13</version> </dependency> 下面是pom.xml的全部配置 <project xmlns="ht