Struts 2 - Las etiquetas del iterador

Crear clases de acción

En primer lugar, creemos una clase simple llamada Employee.java que se parece a:

package com.tutorialspoint.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("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 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;
   }
}

La clase Empleado tiene dos atributos: name y department, también tenemos dos listas de employees - la permanentempleados y contratistas. Tenemos un método llamadogetRecruitmentDecider que devuelve un Decider objeto.

Vuelve la implementación de Decider true si el empleado trabaja para el recruitment departamento, y vuelve false de otra manera.

A continuación, creemos un DepartmentComparator para comparar objetos Employee -

package com.tutorialspoint.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;
   }
}

Como se muestra en el ejemplo anterior, el comparador de departamentos compara a los empleados según el departamento en orden alfabético.

Crear vistas

Crea un archivo llamado employee.jsp con los siguientes contenidos -

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

<html>
   <head>
      <title>Employees</title>
   </head>
   
   <body>
      <b>Example of Iterator Tag</b><br/>
      
      <s:iterator value = "employees">
         <s:property value = "name"/> , 
         <s:property value = "department"/><br/>
      </s:iterator>
   
      <br/><br/>
   
      <b>Employees sorted by Department</b>
      <br/>

      <s:bean name = "com.tutorialspoint.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 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>
</html>

Repasemos las etiquetas utilizadas una por una:

Etiqueta de iterador

Estamos usando el iteratoretiqueta para revisar la lista de empleados. Proporcionamos la propiedad "empleados" como fuente de la etiqueta del iterador. En el cuerpo de la etiqueta del iterador, ahora tenemos acceso al objeto Empleado en la lista de empleados. Imprimimos el nombre del empleado seguido de su departamento.

Ordenar etiqueta

Primero de todo declaramos el DepartmentComparatorcomo un frijol. Le dimos un nombre a este frijoldeptComparator. Luego usamos la etiqueta de clasificación y especificamos la lista "empleados" como fuente y "deptComparator" como comparador a usar. Luego, según el ejemplo anterior, iteramos la lista e imprimimos los empleados. Como puede ver en la salida, esto imprime la lista de empleados ordenados por departamento.

Etiqueta de subconjunto

los subsetLa etiqueta se usa para obtener un subconjunto de la lista o matriz. Tenemos dos tipos de etiquetas de subconjunto. En el primer ejemplo, usamos elrecrutimentDecider para obtener la lista de empleados que trabajan para el departamento de contratación (consulte el método getRecruitmentDecider () en Employee.java).

En el segundo ejemplo, no usamos ningún decisor, sino que buscamos los elementos 2 y 3 de la lista. La etiqueta de subconjunto tiene dos parámetros "cuenta" y "inicio". "inicio" determina el punto de inicio del subconjunto y el "recuento" determina la longitud del subconjunto.

Archivos de configuración

Tu struts.xml debería verse como -

<?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.tutorialspoint.struts2.Employee"
         method = "execute">
         <result name = "success">/employee.jsp</result>
      </action>
   </package>

</struts>

Tu web.xml debería verse como -

<?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>

Haga clic derecho en el nombre del proyecto y haga clic en Export > WAR Filepara crear un archivo War. Luego implemente este WAR en el directorio de aplicaciones web de Tomcat. Finalmente, inicie el servidor Tomcat e intente acceder a la URLhttp://localhost:8080/HelloWorldStruts2/employee.action. Esto producirá la siguiente pantalla: