Struts 2 - I tag Iterator
Crea classi di azioni
Prima di tutto creiamo una semplice classe chiamata Employee.java che assomiglia 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 classe Employee ha due attributi: name e department, abbiamo anche due elenchi di employees - il permanentdipendenti e appaltatori. Abbiamo un metodo chiamatogetRecruitmentDecider che restituisce a Decider oggetto.
L'implementazione di Decider ritorna true se il dipendente lavora per il recruitment reparto e ritorna false altrimenti.
Successivamente, creiamo un file DepartmentComparator per confrontare gli oggetti 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;
}
}
Come mostrato nell'esempio precedente, il comparatore di reparto confronta i dipendenti in base al reparto in ordine alfabetico.
Crea viste
Crea un file chiamato employee.jsp con i seguenti contenuti -
<%@ 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>
Esaminiamo uno per uno i tag utilizzati:
Tag iteratore
Stiamo usando il iteratortag per scorrere l'elenco dei dipendenti. Forniamo la proprietà "dipendenti" come origine del tag iteratore. Nel corpo del tag iteratore, ora abbiamo accesso all'oggetto Employee nell'elenco dei dipendenti. Stampiamo il nome del dipendente seguito dal suo dipartimento.
Ordina tag
Prima di tutto abbiamo dichiarato il file DepartmentComparatorcome un fagiolo. Abbiamo dato un nome a questo fagiolodeptComparator. Quindi abbiamo utilizzato il tag di ordinamento e abbiamo specificato l'elenco "dipendenti" come origine e "deptComparator" come comparatore da utilizzare. Quindi, come nell'esempio precedente, iteriamo l'elenco e stampiamo i dipendenti. Come puoi vedere dall'output, stampa l'elenco dei dipendenti ordinati per reparto.
Tag sottoinsieme
Il subsettag viene utilizzato per ottenere un sottoinsieme dell'elenco o dell'array. Abbiamo due tipi di tag di sottoinsieme. Nel primo esempio, usiamo ilrecrutimentDecider per ottenere l'elenco dei dipendenti che lavorano per il reparto reclutamento (vedere il metodo getRecruitmentDecider () in Employee.java).
Nel secondo esempio, non stiamo usando alcun decisore ma invece siamo dopo gli elementi 2 e 3 nell'elenco. Il tag del sottoinsieme accetta due parametri "count" e "start". "start" determina il punto di partenza del sottoinsieme e "count" determina la lunghezza del sottoinsieme.
File di configurazione
Il tuo struts.xml dovrebbe apparire come -
<?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>
Il tuo web.xml dovrebbe apparire come -
<?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>
Fare clic con il tasto destro sul nome del progetto e fare clic Export > WAR Fileper creare un file War. Quindi distribuire questo WAR nella directory webapps di Tomcat. Infine, avvia il server Tomcat e prova ad accedere all'URLhttp://localhost:8080/HelloWorldStruts2/employee.action. Questo produrrà la seguente schermata: