Come creare una macro / Snippet / HTML Frammento / sezione denominata in JSP senza utilizzare i tag / include / JSPFragments?
-
19-09-2019 - |
Domanda
Questa potrebbe essere una domanda molto newbie, ma non ho trovato nulla soddisfacente
Voglio fare somethign come questo in JSP (out of the box, preferibilmente):
es. in un file chiamato products.jsp
un'implementazione immaginaria che spiega quello che voglio
<x:named-segment name="product">
Product: <strong>${product.name}</strong> <br/>
price: ${product.price}
</x:named-segment>
e più tardi l'uso questo in varie posizione nella stesso JSP è definito
<table>
<c:forEach var="product" items="${products}">
<tr>
<td><x:use-segment name="product"/></td>
</tr>
</c:forEach>
</table>
Ho guardato in JSP tag e JSP Fragements , ma c'è il frammento di frammento è appena passato dal chiamante JSP al tag JSP, e lo voglio di essere nella stessa posizione
è l'unica soluzione è quella di craete un tag JSP per quella specifica piccolo frammento (o includere?)
Mi sto perdendo qualcosa di molto semplice?
Soluzione
Se il piccolo pezzo di testo che si desidera in molti posti è statico, mi sento di raccomandare un JSP includono. Tuttavia, se il testo è dal database / file di piatto / XML, mi consiglia di utilizzare un tag personalizzato. Dall'esempio che ci hai fornito, sembra come se si sta cercando di prodotti di elenco e il loro prezzo. Questo può essere facilmente realizzato in un tag personalizzato.
Nella classe tag, leggere i dati, creare un metodo che creerà i tag HTML per i dati e restituire come una stringa, stampare la stringa. Ora nel tuo JSP, richiamare il tag personalizzato ovunque sia necessario il testo. Naturalmente è necessario parametrizzare il tag di determinare ciò che per andare a prendere / mostra a quale posto.
HTH
V
Altri suggerimenti
Sento il tuo @EranMedan dolore, ancora non posso credere che questo non è una caratteristica di JSP. Dopo anni di volerlo, ho scritto la mia soluzione semplice qui per fare quello che (e io) desidera: https://stackoverflow.com/a/25575120/1607642