Thẻ merge trong Struts 2



Giả sử bạn có hai list là A và B với các giá trị A1, A2 và B1, B2. Nhập hai list này sẽ cho bạn một list gồm A1, B1, A2, 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 một employee.jsp có nội dung sau:

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>


Employees


   Employees va Contractors duoc sap nhap voi nhau
   
,

Thẻ merge nhận hai hoặc nhiều list như là 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



      
      
         /employee.jsp
      
   

web.xml



   
   Struts 2
   
      index.jsp
   
   
      struts2
      
         org.apache.struts2.dispatcher.FilterDispatcher
      
      
      struts2
      /*
   

Bạn thử chạy ứng dụng và kiểm tra kết quả.


control_tag_trong_struts_2.jsp