2016-03-26 17 views
6

Ho Non taglibs dire, io sto usando un tag JSP per fare qualcosa di simile:Thymeleaf ha qualcosa come i tag JSP?

ChildPage.jsp:

<%@ page contentType="text/html" pageEncoding="UTF-8" %> 
<%@ taglib prefix="t" tagdir="/WEB-INF/tags" %> 

<t:layout> 
    <jsp:attribute name="head"> 
     <link href="css/custom.css" type="text/css" rel="stylesheet"/> 
    </jsp:attribute> 
    <jsp:attribute name="scripts"> 
     <script src="js/custom.js"></script> 
    </jsp:attribute> 
    <jsp:body> 
     <p>This is from the child page</p> 
    </jsp:body> 
</t:layout> 

layout.tag :

<%@ tag description="Layout template" pageEncoding="UTF-8" %> 
<%@ attribute name="head" fragment="true" %> 
<%@ attribute name="scripts" fragment="true" %> 
<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <link href="css/main.css" type="text/css" rel="stylesheet"/> 
     <jsp:invoke fragment="head"/> 
    </head> 
    <body> 
     <div id="body"> 
      <p>This is from the parent or "layout"</p> 
      <jsp:doBody/> 
     </div> 
     <div id="footer"> 
      <script src="js/main.js"></script> 
      <jsp:invoke fragment="scripts"/> 
     </div> 
    </body> 
</html> 

se fusi:

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <link href="css/main.css" type="text/css" rel="stylesheet"/> 
     <link href="css/custom.css" type="text/css" rel="stylesheet"/> 
    </head> 
    <body> 
     <div id="body"> 
      <p>This is from the parent or "layout"</p> 
      <p>This is from the child page</p> 
     </div> 
     <div id="footer"> 
      <script src="js/main.js"></script> 
      <script src="js/custom.js"></script> 
     </div> 
    </body> 
</html> 

Questo mi permette di includere script nella sezione di intestazione del JSP sia dal layout e pagine figlio. Lo stesso per il corpo e il piè di pagina.

Ho letto documenti/esempi di Thymeleaf ma forse non sto capendo correttamente perché non sembra che possa fare quello che sto cercando di ottenere.

Il motivo per cui ho "invertito" ciò che sembra una semplice inclusione è che ogni pagina che ho include alcuni script e una sezione di intestazione, ma anche le pagine di mio figlio contengono script da importare e fogli di stile da includere.

Posso raggiungere questo in qualche modo? Sto sbagliando?

+0

non vuoi 'th: replace'? come '' –

+0

@ robertotomás Non voglio sostituire tutti i contenuti all'interno del nodo HTML '', voglio unire i contenuti. – dkanejs

+0

In realtà non capisco cosa stai facendo .. Immagino che se il tuo esempio avesse più 'jsp: invoke framments' sarebbe diverso, ma nel caso tu l'abbia fornito non è qualcosa che non potresti fare con la semplice sostituzione. –

risposta

3

Per impostazione predefinita, Thymeleaf utilizza i cosiddetti layout Includi stile. Svantaggi di questo approccio explained sul sito ufficiale. Ti consiglierei di usare Thymeleaf Layout Dialect. Questo è un dialetto molto più conveniente per creare i layout in stile gerarchico .

A proposito, nel dialetto di layout tutto il contenuto del tag <head> verrà unito automaticamente. Basta dare un'occhiata a example.

+0

Ho usato il Dialect di layout Thymeleaf come descritto. Allegherò la mia soluzione alla mia domanda. – dkanejs

Problemi correlati