Struts标签详解

标签: struts 标签 | 发表时间:2013-03-07 23:53 | 作者:lijizh1013
出处:http://blog.csdn.net

数据标签主要用于提供各种数据访问相关的功能,比如显示一个Action里的属性,以及生成的国际化输出等。

Struts2数据标签主要分为以下几种:

property:用于生成输出某个值 值包:valueStack、StackContext和ActionContext中的值

bean:该标签用于创建一个JavaBean实例,如果指定了id属性,则可以将创建的Javabean实例存放入Stack Context中。

set:用于设置一个新变量,并将该新变量放入指定的范围内

url:用于生成一个URL地址

text:用于输出国际化信息

param:用于设置一个参数,通用用做bean标签 URL标签的子标签

date:用于输出一个日期

debug:用于在页面上生成一个连接,当点击链接时,可以看到ValueStack 和 Stack Context中的内容

include:用于在JSP页面中包含其他的jsp资源等

i18n:用于指定国际化资源文件的baseName

action:该标签用于在JSP页面直接调用一个Action,通过指定executeResult参数,还可以将该Action的处理结果包含到

 

本页面中

push:用于将某个值放入ValueStack的栈顶。

 

以下是部分标签的案例供学员参考:

数据标签主要用于提供各种数据访问相关的功能,比如显示一个Action里的属性,以及生成的国际化输出等。

Struts2数据标签主要分为以下几种:

property:用于生成输出某个值 值包:valueStack、StackContext和ActionContext中的值

bean:该标签用于创建一个JavaBean实例,如果指定了id属性,则可以将创建的Javabean实例存放入Stack Context中。

set:用于设置一个新变量,并将该新变量放入指定的范围内

url:用于生成一个URL地址

text:用于输出国际化信息

param:用于设置一个参数,通用用做bean标签 URL标签的子标签

date:用于输出一个日期

debug:用于在页面上生成一个连接,当点击链接时,可以看到ValueStack 和 Stack Context中的内容

include:用于在JSP页面中包含其他的jsp资源等

i18n:用于指定国际化资源文件的baseName

action:该标签用于在JSP页面直接调用一个Action,通过指定executeResult参数,还可以将该Action的处理结果包含到

 

本页面中

push:用于将某个值放入ValueStack的栈顶。

 

以下是部分标签的案例供学员参考:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!--  引入struts2的标签库 -->

<%@ taglib uri="/struts-tags" prefix="s"%>

<%

       String path = request.getContextPath();

       String basePath = request.getScheme() + "://"

                     + request.getServerName() + ":" + request.getServerPort()

                     + path + "/";

%>

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

       <head>

              <base href="<%=basePath%>">

 

       </head>

 

       <body>

              <h1>

                     Struts2控制标签案例

              </h1>

              <!-- 

      <h3>OGNL中的集合操作</h3>

      <h5>OGNL直接生成List类型的集合</h5>

     

         语法格式:{e1,e2,e3,e4,.......}

         以上的语法中就直接生成了一个List类型的集合,该集合中包含的元素有:e1,e2,e3,e4,

         如果需要更多的集合元素,则元素之间可以使用英文逗号分隔.

      

 

       <h5>OGNL直接生成Map类型的集合</h5>

      

       语法格式:# {key:value,key1:value1,key2:value2,.....}

       以上的语法中就直接生成了一个Map类型的集合,该Mapd对象中的每个key-value对象之间用英文的冒号隔开

       ,多个元素之间用逗号分隔。

      

 

       <h5>OGNL提供的对集合的操作符</h5>

      

          OGNL提供了两个元素符:in 和not in

            in代表的是:判断某个元素是否在指定的集合中

            not in代表的是:某个元素是否不在指定的集合中

          除此之外:OGNL还允许通过某个规则取得集合的子集。取得子集的操作符有:

          1、? : 取出所有符合选择逻辑的元素

          2、^ : 取出符合选择逻辑的第一个元素

          3、$ : 取出符合选择逻辑的最后一个元素

      

 

      

       <h4>控制标签</h4>

      

         Struts2的控制标签,主要用于完成流程控制,以及对ValueStack的控制。

         数据标签主要用于访问ValueStack中的数据;控制标签可以完成输出流程的控制,例如循环,分支等操作

         也可以完成对集合的合并,排序等操作。常见的控制标签有:

         if :用于控制选择输出的标签

         elseif:与if标签结合使用,用于控制选择输出的标签

         else :与if标签结合使用,用于控制选择输出的标签

         iterator:是一个迭代器,用于将集合迭代输出

         sort:用于对集合排序

         append:用于将多个集合拼接成一个新的集合

         generator:是一个字符串解析器,用于将一个字符串解析成一个新的集合

         merge:用于将多个集合拼接成一个新的集合,但与append的拼接方式有所有不同

         subset:用于截取集合的部分元素,形成一个新的集合

        

      

 

       -->

              <h5>

                     if/elseif/else标签

              </h5>

             

                     这三个标签都是用于进行分支控制的,它们都是根据一个Boolean表达式的值,来决定是否计算、输出标签体的内容

                     test:为boolean表达式如果为真执行标签体否则不执行

                     <s:set name="score" value="80"></s:set>

                    

 

 

                     <s:if test="%{#attr.score>60}">

                              成绩及格了.....

            </s:if>

                     <s:elseif test="%{#attr.score>35}">

                                      成绩实在是太烂了....

          </s:elseif>

 

                     <s:else>

                                    成绩以及惨不忍睹.......

          </s:else>

 

                    

 

                     上面的if/elseif/else标签组合使用与Java语言中的if/else if/else条件控制结构相似

                     <s:debug></s:debug>

             

 

 

              <h4>

                     Iterator标签的使用

              </h4>

                     Iterator标签主要用于对集合进行迭代,这里的集合包含List、Set和数组,也可以对Map类型的对象进行迭代输出

                     可以指定3个属性: value :这是一个可选属性,value属性指定的就是被迭代的集合,被迭代的集合通常

                     使用OGNL表达式指定。如果没有指定value属性,则使用ValueStack栈顶的集合

                     id:这是可选属性,该属性指定了集合里的元素的ID

                     status:可选属性,该属性指定了迭代时的IteratorStatus实例,通过该实例即可以判定当前迭代的元素的属性。

                     例如:是否是最后一个元素,以及当前迭代元素的索引等。 IteratorStatus实例包含以下几个方法: int

                     getCount()返回当前迭代了几个元素 int getIndex();返回当前元素的索引 boolean

                     isEven();返回当前迭代的索引是否是偶数 boolean isFirst();返回当前迭代的索引是否是第一个元素 boolean

                     isLast();返回当前迭代的索引是否是最后一个元素 boolean isOdd();返回当前迭代的索引是否是奇数

 

                     var:当前迭代的元素 begin:开始的位置 end:结束的位置 step:跨度

 

                     <table border="1px" cellpadding="0" cellspacing="0">

 

                            <caption>

                                   图书名称信息

                            </caption>

                            <tr>

                                   <th>

                                          图书的名称

                                   </th>

                            </tr>

 

                            <s:iterator var="name"

                                   value="{'HTML入门','Java基础','CSS入门','JavaWeb实战'}" status="st">

 

                                   <s:if test="#st.odd">

                                          <tr style="background-color: red;">

                                                 <td>

                                                        <s:property value="name" />

                                                 </td>

                                          </tr>

                                   </s:if>

                                   <s:else>

                                          <tr style="background-color: green;">

                                                 <td>

                                                        <s:property value="name" />

                                                 </td>

                                          </tr>

                                   </s:else>

 

 

                            </s:iterator>

 

                     </table>

 

                     作业实现表格各行换色

                      <table border="1px" cellpadding="0" cellspacing="0">

 

                            <caption>

                                   图书信息

                            </caption>

                            <tr>

                                   <th>

                                          图书的名称

                                   </th>

                                   <th>

                                          图书的作者

                                   </th>

                            </tr>

 

                            <s:iterator var="name"

                                   value="#{'HTML入门':'redarmy','Java基础':'lihui','CSS入门':'baobao','JavaWeb实战':'yq'}">

                                   <tr>

                                          <td>

                                                 <s:property value="key" />

                                          </td>

                                          <td>

                                                 <s:property value="value" />

                                          </td>

                                   </tr>

                            </s:iterator>

 

                     </table>

             

 

 

              <h5>

                     append标签的使用

              </h5>

 

             

                     append标签用于将多个对象拼接起来,形成一个新的集合

 

                     <h5>

                            List集合拼接

                     </h5>

                     <s:append var="newList">

                            <s:param value="{'HTML入门','Java基础','CSS入门','JavaWeb实战'}"></s:param>

                            <s:param value="{'HIbernate教程','Struts2教程'}"></s:param>

                     </s:append>

 

                     <table border="1px" cellpadding="1px" cellspacing="1px">

                            <caption>

                                   图书信息2

                            </caption>

                            <tr>

                                   <th>

                                          图书名称

                                   </th>

                            </tr>

 

                            <s:iterator value="#newList">

 

                                   <tr>

                                          <td>

                                                 <s:property />

                                          </td>

 

                                   </tr>

                            </s:iterator>

 

                     </table>

 

                    

 

                     <h5>

                            Map集合的拼接

                     </h5>

 

                     <s:append var="newMap">

                            <s:param

                                   value="#{'HTML入门':'redarmy','Java基础':'baobao','CSS入门':'李慧','JavaWeb实战':'yq'}"></s:param>

                            <s:param value="#{'HIbernate教程':'李刚','Struts2教程':'redarmy'}"></s:param>

                     </s:append>

 

                     <table border="1px" cellpadding="1px" cellspacing="1px">

                            <caption>

                                   图书信息2

                            </caption>

                            <tr>

                                   <th>

                                          图书名称

                                   </th>

                                   <th>

                                          图书作者

                                   </th>

                            </tr>

 

                            <s:iterator value="#newMap">

 

                                   <tr>

                                          <td>

                                                 <s:property value="key" />

                                          </td>

                                          <td>

                                                 <s:property value="value" />

                                          </td>

 

                                   </tr>

                            </s:iterator>

 

                     </table>

 

 

                     <h5>

                            map List集合的拼接

                     </h5>

 

 

                     <s:append var="newLM">

                            <s:param

                                   value="#{'HTML入门':'redarmy','Java基础':'baobao','CSS入门':'李慧','JavaWeb实战':'yq'}"></s:param>

                            <!-- List方式要写成Map的形式但没有value值 -->

                            <s:param value="#{'HIbernate教程','Struts2教程'}"></s:param>

                     </s:append>

 

                     <table border="1px" cellpadding="1px" cellspacing="1px">

                            <caption>

                                   图书信息2

                            </caption>

                            <tr>

                                   <th>

                                          图书名称

                                   </th>

                                   <th>

                                          图书作者

                                   </th>

                            </tr>

 

                            <s:iterator value="#newLM">

 

                                   <tr>

                                          <td>

                                                 <s:property value="key" />

                                          </td>

                                          <td>

                                                 <s:property value="value" />

                                          </td>

 

                                   </tr>

                            </s:iterator>

 

                     </table>

                               <h5>

                            merge标签

                     </h5>

                    

                            merge标签的用法看起来非常像append标签,但是有区别:

                            <s:append var="ast">

                                   <s:param value="{'html','css','ajax'}"></s:param>

                                   <s:param value="{'java','jsp','servlet'}"></s:param>

                                   <s:param value="{'struts2','mysql','hibernate'}"></s:param>

                            </s:append>

 

 

                            <s:merge var="mst">

                                   <s:param value="{'html','css','ajax'}"></s:param>

                                   <s:param value="{'java','jsp','servlet'}"></s:param>

                                   <s:param value="{'struts2','mysql','hibernate'}"></s:param>

                            </s:merge>

                            <h3>

                                   append标签拼接

                            </h3>

                            <s:iterator value="#ast">

                                   <s:property />

                                  

 

                            </s:iterator>

                            <h4>

                                   merge标签拼接

                            </h4>

                            <s:iterator value="#mst">

                                   <s:property />

                                 </s:iterator>

 

                            以上看出:append标签的拼接方式是:第1个集合中的第一个元素第1个集合中的第二个元素第1个集合中的第三个元素

                            第2个集合中的第一个元素第2个集合中的第二个元素第2个集合中的第三个元素第3个集合中的第一个元素第3个集合中的第二个元素

                            第3个集合中的第三个元素 merge标签的拼接方式是:第1个集合中的第一个元素第2个集合中的第一个元素第3个集合中的第一个元素

                            第1个集合中的第二个元素第2个集合中的第二个元素第3个集合中的第二个元素第1个集合中的第三个元素第2个集合中的第三个元素

                            第3个集合中的第三个元素

               <h5>

                     generator标签

              </h5>

             

                     将制定的字符串按指定的分隔符分隔成多个字串. count:可选属性,指定生成集合中元素的总数

                     separator:必填属性:指定解析字符串的分隔符 val:必填属性:指定解析字符串

                     converter:可选属性,转换器,该转换器负责将集合中的每个字符串转换成对象

                     id:可选属性,如果指明该属性则生成的集合放入到pageContext属性中注释:generator分隔的字符串

                     ,如果在标签体内,整个临时生成的集合将位于ValueStack的顶端 .但标签结束时,被移出ValueStack。

                                  <table border="1px">

                            <tr>

                                   <th>

                                          名称

                                   </th>

                            </tr>

                            <s:generator val="'this,is,a,doctor'" separator=",">

                                   <!-- 由于在generator标签体内,该集合位于ValueStack的栈顶 ,故此处迭代的就是临时生成的集合 -->

                                   <s:iterator var="bname">

                                          <tr>

                                                 <td>

                                                        <s:property value="bname" />

                                                 </td>

                                          </tr>

                                   </s:iterator>

                                             </s:generator>

                     </table>

                     <!-- 通过id标识此解析的集合存入到pageContext中 -->

                     <s:generator separator="," val="'this,is,a,man'" id="bks"></s:generator>

                    

 

                     <h1>

                            标签体外打印解析的字符串集合

                     </h1>

 

                     <s:iterator value="#attr.bks">

                            <s:property />

                           

 

                     </s:iterator>

               <h1>

                     subset标签

              </h1>

             

                     subset标签用于取得集合的子集,该标签的底层通过:org.apache.struts2.uitl.SubsetIteratorFilte类提供实现

                     属性: count:可选属性:代表子集中的元素个数,如果没有指定代表源集合的全部元素

                     source:可选属性:指定源集合,如果没有指定代表是valueStack的栈顶集合 start:可选属性:从第几元素开始截取

                     decider:可选属性:指定由开发者自己决定是否选中该元素。注意事项:

                     在subset标签内时,subset标签生成的子集位于valueStack的栈顶,如果标签结束,该标签生成的子集

                     将被移出valueStack栈。

 

 

                     <s:subset source="{'java','test','mybook','txs','lihui'}" start="1"

                            count="3">

                            <!-- 由于在subset标签体内,该子集位于ValueStack的栈顶 ,故此处迭代的就是临时生成的集合 -->

                            <s:iterator>

                                   <s:property />

                                  

 

                            </s:iterator>

                            <!-- 注意1代表的是第二元素 -->

                     </s:subset>

     

                     <h5>

                            实现自己的Decider实例

                     </h5>

                     <s:bean name="edu.dc.MyDecider" id="mydecider"></s:bean>

                     <h6>

                            通过自己定义的Decider实例来截取目标集合,生成子集

                     </h6>

                     <s:subset

                            source="{'01Java入门','JSP入门','Servlet入门','02Java基础案例','基于Java的经典案例'}"

                            decider="#mydecider">

                            <s:iterator>

                                   <s:property />

                                  

 

                            </s:iterator>

                     </s:subset>

 

                     <h1>

                            sort标签

                     </h1>

                    

                            用于对指定集合元素进行排序,进行排序时,必须提供自己的排序规则,即实现自己的

                            Comparator,自己的Comparator需要实现java.util.Comparator接口属性:

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

                            source:可选属性:指定排序的集合,如果没有指定代表是valueStack的栈顶集合备注:

                            在sort标签内时,sort标签生成的子集位于valueStack的栈顶,如果标签结束,该标签生成的子集

                            将被移出valueStack栈。

 

                            <s:bean var="mycomparator" name="edu.dc.MyComparator"></s:bean>

                            <s:sort comparator="#mycomparator"

                                   source="{'JavaEE','css','JavaHTMl'}">

                                   <s:iterator>

                                          <s:property />

                                         

 

                                   </s:iterator>

 

                            </s:sort>

                    

 

 

 

             

 

       </body>

</html>

 

/**以上用到的Subset标签用到的bean类如下*/

package edu.dc;

 

import org.apache.struts2.util.*;

 

/** 自定定义Decider类,实现SubsetIteratorFilter.Decider */

public class MyDecider implements SubsetIteratorFilter.Decider {

 

       /** 实现Decider接口中的decide方法,该方法决定集合中的元素是否被选入到子集中 */

       public boolean decide(Object arg0) throws Exception {

              System.out.println("----------------");

              /** 把arg0造型为字符串 */

              String str = (String) arg0;

              /** 如果集合中包含java 那么即可被选入到子集中 */

              System.out.println("----------------" + (str.indexOf("Java") > 0));

              return (str.indexOf("Java") > 0);

       }

 

}

 

/**以下是sort标签实例中用到的备案实例*/

 

package edu.dc;

 

import java.util.Comparator;

 

/** 需要实现Comparator接口 */

public class MyComparator implements Comparator<String> {

       /**

        * 如果该方法返回一个大于0的整数,则第一个元素大于第二元素,如果为0则相同如果小于零,则第一个元素小于第二元素

        */

       public int compare(String o1, String o2) {

              /** 根据字符串的长度决定字符串的大小 */

              return (o1.length() - o2.length());

       }

 

}

 

 

 

作者:lijizh1013 发表于2013-3-7 23:53:50 原文链接
阅读:0 评论:0 查看评论

相关 [struts 标签] 推荐:

Struts标签详解

- - CSDN博客推荐文章
数据标签主要用于提供各种数据访问相关的功能,比如显示一个Action里的属性,以及生成的国际化输出等. Struts2数据标签主要分为以下几种:. property:用于生成输出某个值 值包:valueStack、StackContext和ActionContext中的值. bean:该标签用于创建一个JavaBean实例,如果指定了id属性,则可以将创建的Javabean实例存放入Stack Context中.

Struts导出word

- - CSDN博客Web前端推荐文章
 * @param tableSize 多少列(列数). // 设置 Table 表格. aTable.setWidths(width);// 设置每列所占比例. aTable.setWidth(100); // 占页面宽度 90%. aTable.setAlignment(Element.ALIGN_CENTER);// 居中显示.

Struts 2的Action讲解

- - CSDN博客编程语言推荐文章
三、Struts 2的Action讲解. 有Struts 1.x经验的朋友都知道Action是Struts的核心内容,当然Struts 2.0也不例外. 不过,Struts 1.x与Struts 2.0的Action模型很大的区别. 必须继承org.apache.struts.action.Action或者其子类.

Apache Struts 1宣告退出舞台

- - InfoQ cn
近日,Apache官方网站发布了关于Apache Struts 1 EOL(End-Of-Life) 新闻稿及 通告. 该新闻稿指出,2013年4月5日,Apache Struts项目团队正式通知广大开发者,Struts 1.x开发框架结束使命,并且官方将不会继续提供支持. Struts 1.x项目创建于2000年,最新版本1.3.10发布于2008年12月.

记录Struts从2.1.8升级2.3.15.3过程

- - ITeye博客
structs2爆远程命令执行漏洞,影响版本:Struts 2.0.0 - Struts 2.3.15 ,原来的Struts应用需要升级. Struts版本从2.1.8升级到2.3.15.3:. 直接替换Struts相关jar报错,需要注意:. struts2-*.jar全部由2.1.8 替换为 2.3.15.3版本.

struts 国际化及i18n拦截器原理

- - 企业架构 - ITeye博客
1.在struts2中可以使用标签获取国际化资源信息,如果带有占位符使用来提供参数. 2.多种资源文件配置方式:. 1.全局资源文件配置,在struts.xml中struts.custom.i18n.resources设置资源文件名称,如.

Struts2之我见系列总结---- Struts接收参数的方式(2012.12.22)

- - CSDN博客推荐文章
1.  用Action 的属性接收参数. 使用Domain ModelModel接收参数. 使用DTO--DTO--数据传输对象接收参数. 使用 ModelDriven接收参数. 使用request 对象接收参数. 在action 里面定义要接收的参数,并提供相应的setter,getter,和提交参数的名称一致,并不用做数据类型的转换.

基于 Struts 2 拦截器实现细粒度的基于角色的存取控制

- - 开源软件 - ITeye博客
原文参考:http://www.ibm.com/developerworks/cn/java/j-lo-struts2-rbac/. 本文介绍如何利用 Struts 2 拦截器来为 Java Web 应用添加应用管理的基于角色的存取控制(Role-Based Access Control,RBAC)的设计和实现方法.

京东 12G 用户数据泄露被证实,源自 2013 年的 Struts 2 安全漏洞

- - PingWest品玩
昨晚, 金融新媒体一本财经曝出了一条信息:一个 12G 的数据包开始在地下渠道流通,其中包括用户名、密码、邮箱、QQ号、电话号码、身份证等多个维度,数据多达数千万条. 而黑市买卖双方皆称,这些数据来自京东. 一本财经的记者获取了这个数据包,尝试根据部分用户名和破解的密码登陆,确实大部分可登陆京东账户.

jstl标签经典

- - CSDN博客推荐文章
库 :Core(核心库). 描述 : 标签是一个最常用的标签,用于在   JSP   中显示数据.  它的作用是用来替代通过 JSP 内   置对象 out 或者 <%=%> 标签来输出对象的值. 用于指定在使用  标记输出诸如“ < ”、“ > ”、“ ’ ”、“” ”和“ & ”之类的字符(在  HTML  和  XML  中具有特殊意义)时是否应该进行转义.