Struts 2 - La balise Ajouter

Dites si vous avez deux listes A et B avec les valeurs A1, A2 et B1, B2. La fusion des listes vous donnera A1, B1, A2, B2 tandis que l'ajout des listes vous donnera A1, A2, B1, B2.

Créer des classes d'action

Tout d'abord, créons une classe simple appelée Employee.java qui ressemble à -

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 classe Employee a deux attributs - name et department, nous avons également deux listes d'employés - le permanent employees et le contractors. Nous avons une méthode appeléegetRecruitmentDecider qui renvoie un Deciderobjet. L'implémentation Decider retournetrue si l'employé travaille pour le recruitment département, et il retourne false autrement.

Ensuite, créons un DepartmentComparator pour comparer les objets Employé -

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;
   }
}

Comme le montre l'exemple ci-dessus, le chef de service compare les employés en fonction du service par ordre alphabétique.

Créer des vues

Créez un fichier appelé employee.jsp avec le contenu suivant -

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

<html>
   <head>
      <title>Employees</title>
   </head>
   
   <body>
      <b>Employees and Contractors Merged together</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>

le appendLa balise prend deux listes ou plus comme paramètres. Nous devons donner à l'append unidafin que nous puissions le réutiliser plus tard. Dans cet exemple, nous fournissons des employés et des sous-traitants en tant que paramètres à la balise append. Nous utilisons ensuite l'identifiant "allemployees" pour parcourir la liste jointe et imprimer les détails de l'employé.

Fichiers de configuration

Votre struts.xml devrait ressembler à -

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

Votre web.xml devrait ressembler à -

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

Faites un clic droit sur le nom du projet et cliquez sur Export > WAR Filepour créer un fichier War. Déployez ensuite ce WAR dans le répertoire webapps de Tomcat. Enfin, démarrez le serveur Tomcat et essayez d'accéder à l'URLhttp://localhost:8080/HelloWorldStruts2/employee.action. Cela produira l'écran suivant -