Thẻ append trong Struts 2
Thẻ append nhận hai hoặc nhiều list như là các tham số và phụ thêm chúng vào cuối của nhau.
Giả sử bạn có hai list là A và B với các giá trị là A1, A2 và B1, B2. Sáp nhập hai list này sẽ cho một list là A1, B1, A2, B2, trong khi đó với append sẽ cho bạn kết quả là A1, A2, B1, B2.
Tạo các lớp Action
Đầu tiên chúng ta tạo một lớp Employee.java như sau:
package com.vietjack.struts2; import java.util.ArrayList; import java.util.List; import org.apache.struts2.util.SubsetIteratorFilter.Decider; public class Employee { 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("Hoang","NhanSu")); employees.add(new Employee("Ngan","KeToan")); employees.add(new Employee("Nga","NhanSu")); employees.add(new Employee("Nam","KeToan")); contractors = new ArrayList(); contractors.add(new Employee("Thuong","BanHang")); contractors.add(new Employee("Viet","Marketing")); return "success"; } public Decider getNhanSuDecider() { return new Decider() { public boolean decide(Object element) throws Exception { Employee employee = (Employee)element; return employee.getDepartment().equals("NhanSu"); } }; } 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; } }
Lớp Employee có hai thuộc tính là name và department, chúng ta cũng có hai list là employees và contractors. Chúng ta có hai phương thức là getNhanSuDecider mà trả về một đối tượng Decider. Trình triển khai Decider trả về true nếu employee làm việc cho phòng recruitment, nếu không thì nó trả về false.
Tiếp theo, chúng ta tạo một DepartmentComparator để so sánh các đối tượng Employee.
package com.vietjack.struts2; import java.util.Comparator; public class DepartmentComparator implements Comparator { public int compare(Employee e1, Employee e2) { return e1.getDepartment().compareTo(e2.getDepartment()); } @Override public int compare(Object arg0, Object arg1) { return 0; } }
Như trong ví dụ trên, comparator này so sánh các employee dựa trên department theo thứ tự chữ cái.
Tạo các thành phần View
Tạo employee.jsp có nội dung sau:
<%@ page contentType="text/html; charset=UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> <html> <head> <title>Employees</title> </head> <body> <b>Employees va Contractors duoc sap nhap voi nhau</b> <br /> <s:append id="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> </body> </html>
Thẻ append nhận hai hoặc nhiều list như là các tham số. Chúng ta cần cung cấp cho merge một id để mà chúng ta có thể tái sử dụng nó. Trong ví dụ này, chúng ta cung cấp employees và contractors như là tham số cho thẻ merge. Sau đó, chúng ta sử dụng "allemployees" id để lặp qua danh sách đã được sáp nhập và in chi tiết về từng nhân viên.
Tạo các file cấu hình
struts.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.devMode" value="true" /> <package name="helloworld" extends="struts-default"> <action name="employee" class="com.vietjack.struts2.Employee" method="execute"> <result name="success">/employee.jsp</result> </action> </package> </struts>
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>Struts 2</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.FilterDispatcher </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
Bạn thử chạy ứng dụng và kiểm tra kết quả.