Struts2学习笔记__控制标签

参考http://sishuok.com/forum/blogPost/list/4079.html

if、elseif与else标签

1:if标签的功能:

   类似于Java程序中的if,用来表达分支判断。

else标签的功能:

   类似于Java程序中的else。

elseif标签的功能:

   类似于Java程序中的else if。

2:属性:

   if标签和elseif标签都只有一个test属性,它本身是一个OGNL表达式,运算结果为一个boolean值,表示是否符合条件,必须设置。

   else标签没有属性。

3: 实例

<%@ taglib prefix="s" uri="/struts-tags" %>
<%
	int length=15;
	request.setAttribute("len",length);
%>
<s:if test="#request['len']>=20">
	您输入的值大于等于20
</s:if>
<s:elseif test="#request['len']<=10">
	您输入的值小于等于10
</s:elseif>
<s:else>
	您输入的值在10与20之间
</s:else>
<s:set name="dengji" value="85"/>
<s:if test="#dengji>=90">成绩优秀</s:if>
<s:elseif test="#dengji>=80">成绩良好</s:elseif>
<s:elseif test="#dengji>=60">成绩合格</s:elseif>
<s:else>成绩不合格</s:else>
<s:if test="#stat.index%2==0">
   			<td><s:property value="#stat.count"/> </td>
   			<td style="background-color: red;">
   				<s:property value="publisher"/>
   			</td>
   		  </s:if>
   		  <s:else>
   		    <td><s:property value="#stat.count"/> </td>
   			<td style="background-color: gray;">
   				<s:property value="publisher"/>
   			</td>
   		  </s:else>

iterator标签

用于对集合类型的变量进行迭代输出

1:功能:

   iterator标签用来处理循环,可以用它遍历数组、Set和List等集合对象。这个标签还支持在ActionContext中保持一个保存遍历状态的对象,通过这个变量可以得到当前循环的各种信息。

   iterator标签在遍历一组对象的时候,它把正在循环的对象放在值栈的栈顶,所以可以直接引用这个对象的方法或属性,后面给出示例。

2:属性:

iterator标签的主要属性:

value:用来指明到底循环的是谁,这个属性的值是OGNL表达式,用来访问ActionContext和值栈中需要被循环的对象。
status:这个属性在ActionContext中保存一个对象,用来返回当前循环的各种信息,可以返回的信息有:
l count:集合含有多少个对象。
l index:正在循环的这一项的索引。
l even:当前遍历到的对象是不是处于列表的偶数索引位置。
l odd:当前遍历到的对象是不是处于列表的奇数索引位置。
l first:正在循环的是不是第一个。
l last:正在循环的是不是最后一个。

begin、end、step:指明了如果使用索引来进行循环时的开始、结束和步长。
var:变量名称,用来引用存放到值栈的被循环的对象。
3:示例:

   其实在Java中处理循环的时候,主要用的是for循环和while循环,do-while循环的应用相对少一些。接下来用iterator标签来实现类似于Java中循环的功能。

(1)实现类似于for循环的功能

   假如现在要求完全使用标签,来实现循环输出1到10的值,该如何实现呢?
   很明显,使用iterator标签的begin、end、step和var属性就可以了,示例代码如下:
  1. 迭代所有元素
<%@ taglib prefix="s" uri="/struts-tags" %>  
<s:iterator var="i" begin="1" end="10" step="1">  
    <s:property value="#i"/>  
</s:iterator>  
------------------------------------------------等于
<%  
    for(int i=1;i<=10;i++){  
        out.println(i);  
    }  
%>  

在这里插入图片描述

   	<s:iterator value="{'故人西辞黄鹤楼','烟花三月下扬州'}" var="poem">
   		<s:property value="poem"/><br>
   	</s:iterator>
  1. 迭代指定部分
 获取第四,第五,第六个元素<br/>
    <ul>
        <s:iterator var="it" value='{"zhang","wang","tian","li","zhao","qian","sun","zhou"}' begin="3" end="5">
            <li>
                ${it}
                <s:property value="#it"/>
            </li>
        </s:iterator>
    </ul>
  1. 使用status
    getCount()
    getIndex()
    isFirst()
    isLast()
    isOdd() —-奇数行
    isEven()
 打印奇数元素<br/>
    <ul>
        <s:iterator var="it" value='{"zhang","wang","tian","li","zhao","qian","sun","zhou"}' status="st">
            <s:if test="#st.odd">
                <li>
                    <s:property value="#it"/>
                </li>
            </s:if>
        </s:iterator>
    </ul>
  1. 迭代Map
<table width="300" border="1">
        <s:iterator value="#{'java':99,'C++':90,'C':65,'Python':87,'Ruby':89}" var="entry">
            <tr>
                <td>
                    ${entry.key}
                </td>
                <td>
                    ${entry.value}
                </td>
            </tr>
        </s:iterator>
    </table>

merge和append

merge
属性:var

<s:merge var="newList">
	<s:param value=""/>
</s:merge>

append
属性:var

<s:append var="newList">
 	<s:param value=""/>
</s:append>
    <!-- 定义两个集合list1和list2 -->
    <s:set var="list1" value='{"zhao","qian","sun","li"}'/>
    <s:set var="list2" value='{"zhou","wu","zheng","wang"}'/>
    list1:<s:property value="#list1"/><br/>
    list2:<s:property value="#list2"/><br/>
              使用append合并list1和list2之后<br/>
    <s:append var="append">
        <s:param value="#list1"/>
        <s:param value="#list2"/>
    </s:append>
    <s:iterator var="it" value="#append">
        ${it},
    </s:iterator>
    <br/>
    <h3>append只是单纯的将list2接到list1之后重新组成一个集合</h3>
    使用append合并list1和list2之后<br/>
    <s:merge var="merge">
        <s:param value="#list1"/>
        <s:param value="#list2"/>
    </s:merge>
    <s:iterator var="it" value="#merge">
        ${it},
    </s:iterator>
    <br/>
    <h3>merge从list1和list2依次取一个元素添加到新集合了,这样也就打乱了原有的顺序</h3>

在这里插入图片描述

generator

属性:var,val,separator
注意:是val,不是value。 val是要分割的字符串,separator是分割符。
应用:读取到一个字符串之后,可以使用这个代替split方法达到分割的目的
实例

    <!--注意:在val的取值中,外层是双引号,内层是一个单引号,如果缺少,输出有问题-->
    <s:generator var="newList" val="'abc:xys:sdfs:df'" separator=":"/>
    <ul>
        <s:iterator var="it" value="#newList">
            <li>
                <s:property value="#it"/>
            </li>
        </s:iterator>
    </ul>

在这里插入图片描述

subset

属性:var,source,start,count
介绍:start:开始的位置,count:从开始算起一共多少个元素
注意:var被放到了page Context中,因此用Iterator访问时要使用#attr.varname
实例

<s:subset var="newList" source='{"as","dasg","ew","ew"}' start="2" count="2"/>
    <ul>
        <!--使用#attr.newList访问-->
        <s:iterator var="it" value="#attr.newList">
            <li>
                <s:property value="#it"/>
            </li>
        </s:iterator>
    </ul>

在这里插入图片描述

sort

属性:var,source,comparator
注意:必须指定比较器comparator,所以需要和bean标签一起使用,var的存储位置是page Context,因此必须使用#attr.varName访问
comparator=“排序的方式” soure=“集合名称” var=“属性的名称” 代表的就是Comparator<Person>里面的属性
value="#attr.person" 循环遍历的对象

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

  1. comparator:必填属性,指定进行排序的Comparator实例。
  2. source:可选属性,指定被排序的集合。默认对valuestack栈顶的集合进行排序。
  3. var: 可选,如果指定了改属性,则生成Iterator对象设置成page范围的属性,该属性可以换成ID ,但推荐使用var属性;改属性的作用与subset标签中var属性作用不同!

实例

package action;

import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.interceptor.RequestAware;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * @ Author     : Rain
 * @ Classname  : People
 * @ Date       : 2019/3/23 9:14
 * @ Description:
 */

public class People extends ActionSupport implements RequestAware {


    private String name;
    private Integer age;
    private List<People> list=new ArrayList<People>();
    public List<People> getList() {
        return list;
    }
    public void setList(List<People> list) {
        this.list = list;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public People(String name, Integer age) {
        super();
        this.name = name;
        this.age = age;
    }
    public People(){}

    public String execute(){
        list.add(new People("AA", 5));
        list.add(new People("QQ",11));
        list.add(new People("CQ",15));
        list.add(new People("SS",13));
        list.add(new People("WW",12));
        PeopleCompare com=new PeopleCompare();
        requetmap.put("com", com);
        return "success";
    }
    private Map<String, Object> requetmap;
    @Override
    public void setRequest(Map<String, Object> arg0) {
        requetmap=arg0;
    }


}

package action;

import java.util.Comparator;

/**
 * @ Author     : Rain
 * @ Classname  : PeopleCompare
 * @ Date       : 2019/3/23 9:33
 * @ Description:
 */

public class PeopleCompare implements Comparator<People> {
    @Override
    public int compare(People o1, People o2) {
        return o1.getAge().compareTo(o2.getAge());

    }
}

    <!-- comparator="排序的方式" soure="集合名称" var="属性的名称" 代表的就是Comparator<Person>里面的属性-->
    <s:sort comparator="#request.com" source="list" var="pp">
    <!--  value="#attr.person" 循环遍历的对象-->
    <s:iterator value="#attr.pp"  >
        ${name }--
        ${age }<br>
    </s:iterator>
    </s:sort>
  <action name="gg" class="action.People">
            <!-- result="名称" 当名称是error的时候,代表着对应的是<result name="error"></result>这个信息;exception="异常全类名"-->
            <!-- <exception-mapping result="error" exception="java.lang.ArithmeticException">
            </exception-mapping>
            <result name="error">/context.jsp</result> -->
            <result name="success">/Testif.jsp</result>
        </action>

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_40803626/article/details/88749897