Struts-6

数据标签主要用于提供各种数据访问相关的功能,比如显示一个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提供了两个元素符:innot 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标签主要用于对集合进行迭代,这里的集合包含ListSet和数组,也可以对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());

       }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值