2016-03-26 13 views
6

ja nie średnie taglibs używam tag JSP zrobić coś takiego:Czy Thymeleaf ma coś w rodzaju znaczników 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> 

Kiedy wygenerowana:

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

To pozwala mi to skrypty w sekcji nagłówka JSP zarówno z układu i stron podrzędnych. To samo dotyczy ciała i stopki.

Przeczytałem w dokumentach/przykładach Thymeleaf, ale może nie rozumiem poprawnie, ponieważ nie wygląda na to, że mogę zrobić to, co próbuję osiągnąć.

Powodem, dla którego mam "odwrócony", co wydaje się proste, jest każda strona, na której znajdują się niektóre skrypty i sekcja nagłówka, ale moje strony podrzędne mają również importowane skrypty i arkusze stylów, które należy uwzględnić.

Czy mogę to jakoś osiągnąć? Czy robię to źle?

+0

Nie chcesz "th: replace"? jak '' –

+0

@ robertotomás Nie chcę zastąpić całej zawartości wewnątrz węzła HTML '', chcę scalić zawartość. – dkanejs

+0

Właściwie to nie rozumiem, co robisz .. Myślę, że gdyby twój przykład miał wiele 'jsp: invoke fragments', to by było inaczej, ale w przypadku, w którym to zrobiłeś, to naprawdę nie jest coś, czego nie można zrobić przy prostym podstawianiu. –

Odpowiedz

3

Domyślnie Thymeleaf używa tak zwanych układów w stylu włączania. Wady tego podejścia explained na oficjalnej stronie. Radziłbym użyć Thymeleaf Layout Dialect. Jest to o wiele wygodniejszy dialekt, który tworzy hierarchiczne układy stylu:.

Nawiasem mówiąc, w elemencie Layout cała zawartość tagu <head> zostanie automatycznie scalona. Wystarczy spojrzeć na example.

+0

Użyłem dialektu Thymeleaf Layout zgodnie z opisem. Dołączę moje rozwiązanie do mojego pytania. – dkanejs

Powiązane problemy