Creato da pastuweb.com
Share My Page
My Social Accounts
Account FaceBook Account LinkedIn Account Twitter Account Google Plus Account Git Hub

In questo esempio vi mostrerò un uso ad-hoc dei DisplayTag.

exportDiv.jsp

Come prima cosa, creiamo la JSP: exportDiv.jsp

Questa jsp contiene solo il codice del <div> con i vari pulsanti di Export (CSV, Excel, XML, PDF).

<br>
<div class="exportlinks"><span style="float:left;"><strong>Export: </strong></span>
<a style="float:left;" href="/common/export.jsp?d-16544-e=1&amp;d-446371-e=1&amp;6578706f7274=1&amp;d-1336808-e=1">
<span class="export csv"> <img src="/images/csv.png" style="width:35px;height:35px;border:0px;" title="CSV" alt="CSV" /> </span></a>
<span style="float:left;" class="ui-icon ui-icon-grip-dotted-vertical"></span>  
<a style="float:left;" href="/common/export.jsp?d-16544-e=1&amp;d-446371-e=2&amp;6578706f7274=1&amp;d-1336808-e=1">
<span class="export excel"> <img src="/images/excel.png" style="width:35px;height:35px;border:0px;" title="EXCEL" alt="EXCEL" /> </span></a>
<span style="float:left;" class="ui-icon ui-icon-grip-dotted-vertical"></span> 
<a style="float:left;" href="/common/export.jsp?d-16544-e=1&amp;d-446371-e=3&amp;6578706f7274=1&amp;d-1336808-e=1">
<span class="export xml"> <img src="/images/xml.png" style="width:35px;height:35px;border:0px;" title="XML" alt="XML" /> </span></a>
<span style="float:left;" class="ui-icon ui-icon-grip-dotted-vertical"></span>  
<a style="float:left;" href="/common/export.jsp?d-16544-e=1&amp;d-446371-e=5&amp;6578706f7274=1&amp;d-1336808-e=1">
<span class="export pdf"> <img src="/images/pdf.png" style="width:35px;height:35px;border:0px;" title="PDF" alt="PDF" /> </span></a>
<span style="float:left;" class="ui-icon ui-icon-grip-dotted-vertical"></span>
</div>
<br>
 
Nota: modificate i path delle immagini e della JSP export.jsp con i path del vostro progetto.
 
dettaglioDati.jsp
 
Adesso passiamo alla creazione della JSP che utilizza i DisplayTag e che quindi visualizza i dati da esportare, lo chiamata: dettaglioDati.jsp
 
In cima includiamo questo taglib:
<%@ taglib uri="http://displaytag.sf.net" prefix="display" %>
 
Poi inseriamo un riferimento alla classe List:
<%@page import="java.util.List"%>
 
Poi inseriamo uno scriptlet che recupera una lista di Object: "dataList"
<%
//recupera l'attributo "dataList" valorizzato da una Servlet o Portlet
List<Object[]> dataList = (List<Object[]>)renderRequest.getAttribute("dataList");
 
  // devo passare l'oggetto alla JSPche si occupa dell'export (export.jsp)
  request.getSession().setAttribute("dataList", dataList);
  request.getSession().setAttribute("idOperazione", idOperazione); //questo lo visualizzerò solo nell'Export
%>
 
Poi sempre nella JSP dettaglioDati.jsp inseriamo il codice DisplayTag:
 
<display:table name="${datiList}" id="dato"  cellspacing="10" cellpadding="0" pagesize="10" export="false" class="table" sort="list">
<display:column media="all" sortable="true" title="Utente" style="text-align:left"> 
<c:out value="${dato[0]}"/> <c:out value="${dato[1]}"/>
</display:column>
<display:column media="all" sortable="true" title="Data Ora" property="[2]" format="{0,date,dd-MM-yyyy HH:mm:ss}" /> 
<display:column media="all" sortable="true" title="Valore" style="text-align:center;font-weight:bold;"> 
<c:out value="${dato[3]}"/> <c:out value="${dato[4]}"/>
</display:column>
<display:column media="all" sortable="true" title="Tipo Dato" style="text-align:left;"> 
<c:out value="${dato[5]}"/>
</display:column>
</display:table>
 
Dopo il costrutto <display:table> includiamo il <div> con i pulsanti di Export definito all'inizio (da notare che l'export di default è stato disabilitato):
 
<%@ include file="/common/exportDiv.jsp"%>
 
export.jsp
In questa JSP inseriamo la logica dell'Export ad-hoc vero e proprio che lavora a livello di SESSIONE:
 
Bisogna includere:
<%@page import="java.util.Date"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@page import="java.text.DateFormat"%>
<%@page import="java.util.Collection"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.Enumeration"%>
<%@page import="java.util.List"%>
<%@ taglib uri="http://displaytag.sf.net" prefix="display" %>
 
Questo invece è lo scriptlet che recupera gli attributi dalla sessione corrente:
 
<%
 
// reload the data from the session
List<Object[]>  lista = null;
String idOperazione= null;
 
Enumeration names =  session.getAttributeNames();
while (names.hasMoreElements()) {
   String name = (String) names.nextElement();
   out.println(name);
  if (name.contains("dataList")) {
    lista = (List<Object[]>) request.getSession().getAttribute(name);
  }else if(name.contains("idOperazione")){
 idOperazione = (String) request.getSession().getAttribute(name);
  }
}
 
request.setAttribute("dataList", lista);
request.setAttribute("idOperazione", idOperazione);
 
//la creazione di "normalizzaList" è facoltativo, serve solo per raggruppare da subito i dati per non fare le concatenazioni dopo
List<Object[]> normalizzaList = new ArrayList<Object[]>();
for (Object[] sintesi : lista){
 
Object[] row = new Object[4];
 
//nome-gognome
row[0] = sintesi[0] + " " + sintesi[1];
//data e ora
row[1] = (new SimpleDateFormat("dd-MM-yyyy HH:mm:ss")).format((Date)sintesi[2]);
//valore e unità di misura
row[2] = sintesi[3]+" "+sintesi[4];
//tipo dato
row[3] = sintesi[5];
 
normalizzaList .add(row); 
 
}
 
request.setAttribute("normalizzaList ",normalizzaList );
 
%>
 
 
E poi richiamiamo un nuovo DisplayTag, leggermente diverso da quello della dettagliodati.jsp, per l'esportazione:
 
<display:table name='<%=request.getAttribute("normalizzaList") %>' id="normalizza"  cellspacing="10"
cellpadding="0" pagesize="10" export="true" class="table" sort="list" >
<display:setProperty name="factory.requestHelper" value="org.displaytag.util.DefaultRequestHelperFactory">
</display:setProperty>
 
<display:column media="all" title="UTENTE" >
<c:out value="${normalizza[0] }"/>
</display:column>
<display:column media="all" title="IdOperazione" >
<%=idOperazione %>
</display:column>
<display:column media="all" title="DATA" >
<c:out value="${normalizza[1] }"/>
</display:column>
<display:column media="all" title="VALORE" >
<c:out value="${normalizza[2] }"/>
</display:column>
<display:column media="all" title="TIPO DATO" >
<c:out value="${normalizza[3] }"/>
</display:column>
</display:table >
 
Importante: aggiungere media="all" in tutti i display:column in questo modo si evita il problema della mancanza dei nomi delle colonne negli export in Excel e CSV. 
Average (1 Vote)
The average rating is 5.0 stars out of 5.