Struts2控制标签

本文深入探讨了Struts2框架中的条件标签(if, ifelse, else)和迭代标签(iterator)的使用方法,通过实例展示了如何在页面上进行条件判断和数据集合的迭代操作。此外,还介绍了merge和append标签的功能区别,以及generator标签的使用场景。

1、ifelse标签

一共有这三类标签,用法大致相同。
1. < s:if >
2. < s:ifelse >
3. < s:else >

example:

hello.jsp
<form action="hello">
    <label >Please pick a name</label><br/>
    <select name="name">
        <option name="Mike">Mike</option>
        <option name="Jason">Jason</option>
        <option name="Mark">Mark</option>
    </select>
    <input type="submit" value="Say Hello"/>
</form>
helloworld.jsp
<body>
    <b>Example of If and Else</b><br/>
    <s:if test="name == Mike">
        You have select Mike
    </s:if>
    <s:elseif test="name == Jason">
        You have select Jason
    </s:elseif>
    <s:else>
        You don't select Mike and Jason
    </s:else>
</body>

hello.jsp选择姓名后交提表单,跳转到helloworld.jsp。
在if与else标签中进行判断,输出相应信息。

2、iterator标签

example:

<body>
    <b>Example of Iterator Tag</b><br/>
    <s:iterator value="employees">
        <s:property value="name"/> ,
        <s:property value="department"/><br/>
    </s:iterator>

<b>Employees sorted by Department</b><br/>

<s:bean name="cn.w3cschool.struts2.DepartmentComparator"
        var="deptComparator" />

<s:sort comparator="deptComparator" source="employees">
    <s:iterator>
        <s:property value="name"/> ,
        <s:property value="department"/><br/>
    </s:iterator>
</s:sort>
<br/><br/>

<b>SubSet Tag - Employees working in Recruitment department </b><br/>
<s:subset decider="recruitmentDecider" source="employees">
    <s:iterator>
        <s:property value="name"/> ,
        <s:property value="department"/><br/>
    </s:iterator>
</s:subset>
<br/><br/>

<b>SubSet Tag - Employees working in Accounts department </b><br/>
<s:subset decider="accountsDecider" source="employees">
    <s:iterator>
        <s:property value="name"/> ,
        <s:property value="department"/><br/>
    </s:iterator>
</s:subset>
<br/><br/>

<b>SubSet Tag - Employees 2 and 3 </b><br/>
<s:subset start="1" count="2" source="employees">
    <s:iterator>
        <s:property value="name"/> ,
        <s:property value="department"/><br/>
    </s:iterator>
</s:subset>
</body>
public class Employee extends ActionSupport {
    private String name;
    private String department;

    public Employee(){}
    public Employee(String name, String department) {
        this.name = name;
        this.department = department;
    }

    private List employees;
    private List contractors;

    public String execute() {
        employees = new ArrayList();
        employees.add(new Employee("George","Recruitment"));
        employees.add(new Employee("Danielle","Accounts"));
        employees.add(new Employee("Melissa","Recruitment"));
        employees.add(new Employee("Rose","Accounts"));

        contractors = new ArrayList();
        contractors.add(new Employee("Mindy","Database"));
        contractors.add(new Employee("Vanessa","Network"));
        return "success";
    }

    public Decider getRecruitmentDecider() {
        return new Decider() {
            public boolean decide(Object element) throws Exception {
                Employee employee = (Employee) element;
                return employee.getDepartment().equals("Recruitment");
            }
        };
    }

    public Decider getAccountsDecider() {
        return new Decider() {
            public boolean decide(Object element) throws Exception {
                Employee employee = (Employee) element;
                return employee.getDepartment().equals("Accounts");
            }
        };
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDepartment() {
        return department;
    }

    public void setDepartment(String department) {
        this.department = department;
    }

    public List getEmployees() {
        return employees;
    }

    public void setEmployees(List employees) {
        this.employees = employees;
    }

    public List getContractors() {
        return contractors;
    }

    public void setContractors(List contractors) {
        this.contractors = contractors;
    }
}

创建一个Employee类,同时创建成员变量 List类型的employees与String类型的name和department。

decider="accountsDecider"

该属性比较特别,需要在Employee类中创建方法getAccountsDecider(),注意名字对应不要错误。

public Decider getAccountsDecider() {
        return new Decider() {
            public boolean decide(Object element) throws Exception {
                Employee employee = (Employee) element;
                return employee.getDepartment().equals("Accounts");
            }
        };
    }

这段代码需要创建一个DepartmentComparator类,在该类中重写compare方法,进行需要的判断。

<s:bean name="cn.w3cschool.struts2.DepartmentComparator"
        var="deptComparator" />

<s:sort comparator="deptComparator" source="employees">
    <s:iterator>
        <s:property value="name"/> ,
        <s:property value="department"/><br/>
    </s:iterator>
</s:sort>
public class DepartmentComparator implements Comparator {
    public int compare(Employee e1, Employee e2) {
        return e1.getDepartment().compareTo(e2.getDepartment());
    }

    @Override
    public int compare(Object o1, Object o2) {
        return 0;
    }
}

取子集,从记录从0计数,所以取第二条与第三条记录。

<s:subset start="1" count="2" source="employees">
    <s:iterator>
        <s:property value="name"/> ,
        <s:property value="department"/><br/>
    </s:iterator>
</s:subset>

这里写图片描述

3、merge标签

example:
一样是使用上面的Employee类。

<s:merge var="allemployees">
        <s:param value="employees"/>
        <s:param value="contractors"/>
</s:merge>
<s:iterator value="allemployees">
    <s:property value="name"/>
    <s:property value="department"/><br/>
</s:iterator>

merge标签作用为把两个表合成一个表,但是与接下来的append标签有一些不同。
为merge标签添加var属性,即可在其他标签中调用。在merge标签内,param标签指定表,employees与contractors为两个不同表。

4、append标签

example:
一样是使用上面的Employee类。

<s:append var="allemployees">
        <s:param value="employees"/>
        <s:param value="contractors"/>
</s:append>
<s:iterator value="allemployees">
    <s:property value="name"/>
    <s:property value="department"/><br/>
</s:iterator>

这里写图片描述

5、generator标签

example:

<s:generator separator="," val="%{'red, blue, black, pink, white, green'}">
    <s:iterator>
        <s:property/><br/>
    </s:iterator>
</s:generator>

分隔符为‘,’。
网页输出为:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值