ç®æ¬¡8ãã³ãã¬ãŒãã®ã¬ã€ã¢ãŠã
8.1ãã³ãã¬ãŒããã©ã°ã¡ã³ãã®æå¹å
ãã©ã°ã¡ã³ããžã®å®çŸ©ãšãªã³ã¯ãã³ãã¬ãŒãã«ã¯ãå€ãã®å Žåãããã¿ãŒãã¿ã€ãã«ãã¡ãã¥ãŒãªã©ãä»ã®ãã³ãã¬ãŒãããã®ãã©ã°ã¡ã³ããå«ãŸããŸã...
ãããç°¡åã«ããããã«ãThymeleafã§ã¯ã
thïŒfragment屿§ã䜿çšããŠåŸã§å«ããããã«ãããã®ãã©ã°ã¡ã³ããå®çŸ©ããå¿
èŠããããŸãã
ãã¹ãŠã®è£œåããŒãžã«æšæºããã¿ãŒã远å ããå Žåãæ¬¡ã®ã³ãŒããå«ããã¡ã€ã«/WEB-INF/templates/footer.htmlãäœæããŸãã
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <body> <div th:fragment="copy"> © 2011 The Good Thymes Virtual Grocery </div> </body> </html>
äžèšã®ã³ãŒãã¯ããcopyããšåŒã°ããã¹ãããããå®çŸ©ããŸããããã¯ã
thïŒinsertãŸãã¯
thïŒreplace屿§ã®ããããã䜿çšããŠããŒã ããŒãžã«ç°¡åã«å«ããããšãã§ããŸãïŒ
thïŒincludeãšåæ§
ã« ãThymeleaf 3.0ã§ã¯æšå¥šãããŸããïŒïŒ
<body> ... <div th:insert="~{footer :: copy}"></div> </body>
thïŒinsertã¯ããã©ã°ã¡ã³ãã®åŒ
ïŒã{...}ïŒããã©ã°ã¡ã³ãã«ãã£ã¹ããããããšãæ³å®ããŠããããšã«æ³šæããŠãã ããã ãã ããè€éã§ãªããã©ã°ã¡ã³ãåŒã§ããäŸã§ã¯ãèŠçŽ
ïŒã{ã}ïŒã¯å®å
šã«ãªãã·ã§ã³ã§ãããããäžèšã®ã³ãŒãã¯åçã§ãã
<body> ... <div th:insert="footer :: copy"></div> </body>
ãã©ã°ã¡ã³ãæ§æ
ãã©ã°ã¡ã³ãåŒã®æ§æã¯éåžžã«ç°¡åã§ãã 3ã€ã®ç°ãªã圢åŒããããŸãã
ç¹°ãè¿ããŸããããããã¯
ã{...}ã¯
thïŒinsert /
thïŒreplaceã§ã¯ãªãã·ã§ã³ã§ãã
ã¹ããããã«ã¯ã
thïŒ*屿§ãå«ããããšãã§ããŸãã ãããã®å±æ§ã¯ããã©ã°ã¡ã³ããã¿ãŒã²ãããã³ãã¬ãŒãïŒ
thïŒinsert /
thïŒreplace屿§ãå«ããã®ïŒã«å«ãŸããåŸã«å®è¡ããããã®ã¿ãŒã²ãããã³ãã¬ãŒãã§å®çŸ©ãããã³ã³ããã¹ã倿°ãåç
§ã§ããŸãã
ãã©ã°ã¡ã³ãã«å¯Ÿãããã®ã¢ãããŒãã®å€§ããªå©ç¹ã¯ãThymeleafãä»ã®ãã³ãã¬ãŒãã«å€æããæ©èœãç¶æããªãããå®å
šãã€æ£ç¢ºãªã¬ã€ã¢ãŠãæ§é ã§ããã©ãŠã¶ãŒã«ãã£ãŠå®å
šã«è¡šç€ºãããããŒãžã«ãã©ã°ã¡ã³ããæžã蟌ãããšãã§ããããšã§ãã
thïŒãã©ã°ã¡ã³ããªãã®ãã©ã°ã¡ã³ããžã®ãªã³ã¯ããŒã¯ã¢ããã»ã¬ã¯ã¿ãŒã®åã®ãããã§ã
thïŒãã©ã°ã¡ã³ã屿§ã䜿çšããªããã©ã°ã¡ã³ããå«ããããšãã§ããŸãã Thymeleafã®ç¥èããªããŠããå¥ã®ã¢ããªã±ãŒã·ã§ã³ããæ¥ãããŒã¯ã¢ããã³ãŒãã§ããå¯èœæ§ããããŸãã
<div id="copy-section"> © 2011 The Good Thymes Virtual Grocery </div>
äžèšã®ã¹ããããã¯ãCSSã»ã¬ã¯ã¿ãŒãšåæ§ã«ãid屿§ã§åç
§ããã ãã§äœ¿çšã§ããŸãã
<body> ... <div th:insert="~{footer :: #copy-section}"></div> </body>
thïŒinsertãšthïŒreplaceã®éãïŒããã³thïŒincludeïŒthïŒinsertãšthïŒreplaceïŒããã³thïŒincludeã3.0以éã¯æšå¥šãããŸããïŒã®éãã¯äœã§ããïŒ
thïŒæ¿å
¥ã¯æãç°¡åã§ãã芪ïŒãã¹ãïŒã¿ã°ã®æ¬äœãšããŠç¹å®ã®ãã©ã°ã¡ã³ããæ¿å
¥ããã ãã§ãã
thïŒreplace㯠ã芪ïŒãã¹ãïŒã¿ã°ãç¹å®ã®ãã©ã°ã¡ã³ãã§äžæžãããŸãã
thïŒincludeã¯
thïŒinsertã«äŒŒãŠã
ãŸããããã©ã°ã¡ã³ããæ¿å
¥ãã代ããã«ãåã«ãã©ã°ã¡ã³ãã®ã³ã³ãã³ããæ¿å
¥ããŸãã
ã€ãŸããæ¬¡ã®ãããªHTMLãã©ã°ã¡ã³ãïŒ
<footer th:fragment="copy"> © 2011 The Good Thymes Virtual Grocery </footer>
芪ïŒãã¹ãïŒã¿ã°ã«3åå«ãŸããŠããŸãïŒ
<body> ... <div th:insert="footer :: copy"></div> <div th:replace="footer :: copy"></div> <div th:include="footer :: copy"></div> </body>
çµæãçæãããŸãïŒ
<body> ... <div> <footer> © 2011 The Good Thymes Virtual Grocery </footer> </div> <footer> © 2011 The Good Thymes Virtual Grocery </footer> <div> © 2011 The Good Thymes Virtual Grocery </div> </body>
8.2ãã©ã¡ãŒã¿åå¯èœãªãã©ã°ã¡ã³ã
ãã³ãã¬ãŒããã©ã°ã¡ã³ãã®ããæ©èœçãªã¡ã«ããºã ãäœæããããã«ã
thïŒãã©ã°ã¡ã³ãã§å®çŸ©ããã
ãã©ã°ã¡ã³ãã¯ãäžé£ã®ãã©ã¡ãŒã¿ãŒãåãããšãã§ããŸãã
<div th:fragment="frag (onevar,twovar)"> <p th:text="${onevar} + ' - ' + ${twovar}">...</p> </div>
ããã«ã¯ããããã®2ã€ã®æ§æã®ããããã䜿çšããŠã
thïŒinsertãŸãã¯
thïŒreplaceãããã©ã°ã¡ã³ããåŒã³åºãå¿
èŠããããŸãã
<div th:replace="::frag (${value1},${value2})">...</div> <div th:replace="::frag (onevar=${value1},twovar=${value2})">...</div>
åŸè
ã®å Žåãé åºã¯éèŠã§ã¯ãªãããšã«æ³šæããŠãã ããã
<div th:replace="::frag (twovar=${value2},onevar=${value1})">...</div>
ãã©ã°ã¡ã³ãåŒæ°ã®ãªããã©ã°ã¡ã³ãããŒã«ã«å€æ°ãã©ã°ã¡ã³ããåŒæ°ãªãã§å®çŸ©ãããŠããå Žåã§ãïŒ
<div th:fragment="frag"> ... </div>
äžèšã®2çªç®ã®æ§æã䜿çšããŠããããåŒã³åºãããšãã§ããŸãïŒ2çªç®ã®ã¿ïŒã
<div th:replace="::frag (onevar=${value1},twovar=${value2})">
ããã¯ã
thïŒreplaceãš
thïŒãçµã¿åãããããšãšåçã§ãïŒ
<div th:replace="::frag" th:with="onevar=${value1},twovar=${value2}">
ãã©ã°ã¡ã³ãã®ããŒã«ã«å€æ°ã®ãã®æå®ïŒåŒæ°ããããã©ããïŒã¯ãå®è¡åã«ã³ã³ããã¹ãã空ã«ããªãããšã«æ³šæããŠãã ããã ã¹ããããã¯ãåŒã³åºããã³ãã¬ãŒãã§äœ¿çšãããåã³ã³ããã¹ã倿°ã«åŒãç¶ãã¢ã¯ã»ã¹ã§ããŸãã
thïŒãã³ãã¬ãŒãå
ã®ã¯ã¬ãŒã ã«å¯ŸããŠã¢ãµãŒãthïŒassert屿§ã¯ãã³ã³ãã§åºåãããåŒã®ãªã¹ãã瀺ãããšãã§ããŸããã³ã³ãã§åºåããšãè©äŸ¡ããšã«trueãšããŠè©äŸ¡ããã³è¡šç€ºãããããã§ãªãå Žåã¯äŸå€ãã¹ããŒãããŸãã
<div th:assert="${onevar},(${twovar} != 43)">...</div>
ããã¯ããã©ã¡ãŒã¿ãŒããã©ã°ã¡ã³ã眲åãšäžèŽããããšã確èªããã®ã«åœ¹ç«ã¡ãŸãã
<header th:fragment="contentheader(title)" th:assert="${!#strings.isEmpty(title)}">...</header>
8.3æè»ãªã¬ã€ã¢ãŠãïŒãã©ã°ã¡ã³ãã®åçŽãªæ¿å
¥ã«å ããŠ
ãã©ã°ã¡ã³ãã®ãããã§ãããã¹ããæ°å€ãBeanã§ã¯ãªããããŒã¯ã¢ãããã©ã°ã¡ã³ãã§ãããã©ã¡ãŒã¿ãŒãæå®ã§ããŸãã
ããã«ããããã³ãã¬ãŒãã®åŒã³åºãããã®ããŒã¯ã¢ããã§åŒ·åã§ããããã«ãã©ã°ã¡ã³ããäœæã§ããéåžžã«æè»ãªãã³ãã¬ãŒãã¬ã€ã¢ãŠãã¡ã«ããºã ã«ã€ãªãããŸãã
次ã®ã¹ããããã§ããããŒå€æ°ãšãªã³ã¯å€æ°ã䜿çšããŠããããšã«æ³šæããŠãã ããã
<head th:fragment="common_header(title,links)"> <title th:replace="${title}">The awesome application</title> <link rel="stylesheet" type="text/css" media="all" th:href="@{/css/awesomeapp.css}"> <link rel="shortcut icon" th:href="@{/images/favicon.ico}"> <script type="text/javascript" th:src="@{/sh/scripts/codebase.js}"></script> <th:block th:replace="${links}" /> </head>
ãã®ã¹ããããã¯æ¬¡ã®ããã«åŒã³åºãããšãã§ããŸãã
<head th:replace="base :: common_header(~{::title},~{::link})"> <title>Awesome - Main</title> <link rel="stylesheet" th:href="@{/css/bootstrap.min.css}"> <link rel="stylesheet" th:href="@{/themes/smoothness/jquery-ui.css}"> </head>
...ãããŠãçµæã¯ãããããŒãšãªã³ã¯å€æ°ã®å€ãšããŠåŒã³åºããã³ãã¬ãŒãããã®å®éã®<title>ããã³<linkïŒgtã¿ã°ã®äœ¿çšã«ãªããŸãããã®çµæãæ¿å
¥æã«ãã©ã°ã¡ã³ããæ§æãããŸãã
<head> <title>Awesome - Main</title> <link rel="stylesheet" type="text/css" media="all" href="/awe/css/awesomeapp.css"> <link rel="shortcut icon" href="/awe/images/favicon.ico"> <script type="text/javascript" src="/awe/sh/scripts/codebase.js"></script> <link rel="stylesheet" href="/awe/css/bootstrap.min.css"> <link rel="stylesheet" href="/awe/themes/smoothness/jquery-ui.css"> </head>
空ã®ãã©ã°ã¡ã³ãã䜿çšããç¹å¥ãªãã©ã°ã¡ã³ãåŒ "
empty fragment "
ïŒã{}ïŒã䜿çšããŠãããŒã¯ã¢ããã瀺ãããšãã§ããŸãã åã®äŸã䜿çšããŸãã
<head th:replace="base :: common_header(~{::title},~{})"> <title>Awesome - Main</title> </head>
ãã©ã°ã¡ã³ãïŒãªã³ã¯ïŒã®2çªç®ã®ãã©ã¡ãŒã¿ãŒã空ã®ãã©ã°ã¡ã³ãã«èšå®ãããŠããããããããã¯<thïŒblock thïŒreplace = "$ {links}" />ã«ã¯äœãæžã蟌ãŸããªãããšã«æ³šæããŠãã ããã
<head> <title>Awesome - Main</title> <link rel="stylesheet" type="text/css" media="all" href="/awe/css/awesomeapp.css"> <link rel="shortcut icon" href="/awe/images/favicon.ico"> <script type="text/javascript" src="/awe/sh/scripts/codebase.js"></script> </head>
éæäœããŒã¯ã³ã䜿çšããéæäœããŒã¯ã³ã¯ããã©ã°ã¡ã³ãã«çŸåšã®ããŒã¯ã¢ãããããã©ã«ãå€ãšããŠäœ¿çšããå Žåã®ã¿ããã©ã°ã¡ã³ãã®ãã©ã¡ãŒã¿ãŒãšããŠäœ¿çšããããšãã§ããŸãã ç¹°ãè¿ããŸãããcommon_headerã®äŸã䜿çšããŸãã
<head th:replace="base :: common_header(_,~{::link})"> <title>Awesome - Main</title> <link rel="stylesheet" th:href="@{/css/bootstrap.min.css}"> <link rel="stylesheet" th:href="@{/themes/smoothness/jquery-ui.css}"> </head>
titleåŒæ°ïŒcommon_headerãã©ã°ã¡ã³ãã®æåã®åŒæ°ïŒãno-op
ïŒ_ïŒã«èšå®ãããæ¹æ³ã確èªããŸããããã¯ããã©ã°ã¡ã³ãã®ãã®éšåããŸã£ããå®è¡ãããªãããšãæå³ããŸãïŒtitle = no-operationïŒïŒ
<title th:replace="${title}">The awesome application</title>
çµæã¯æ¬¡ã®ãšããã§ãã
<head> <title>The awesome application</title> <link rel="stylesheet" type="text/css" media="all" href="/awe/css/awesomeapp.css"> <link rel="shortcut icon" href="/awe/images/favicon.ico"> <script type="text/javascript" src="/awe/sh/scripts/codebase.js"></script> <link rel="stylesheet" href="/awe/css/bootstrap.min.css"> <link rel="stylesheet" href="/awe/themes/smoothness/jquery-ui.css"> </head>
é«åºŠãªãã©ã°ã¡ã³ãæ¿å
¥æ¡ä»¶"
emtpy "ãã©ã°ã¡ã³ããš "
no-operation "ãã©ã°ã¡ã³ãã®äž¡æ¹ãå©çšã§ãããããéåžžã«ã·ã³ãã«ã§ãšã¬ã¬ã³ããªæ¹æ³ã§æ¡ä»¶ä»ãã§ãã©ã°ã¡ã³ããæ¿å
¥ã§ããŸãã
ããšãã°ããŠãŒã¶ãŒã管çè
ã§ããå Žåã«ã®ã¿ãcommon :: adminheadããã©ã°ã¡ã³ããæ¿å
¥ããããã§ãªãå Žåã¯äœãæ¿å
¥ããªãïŒemtpyãã©ã°ã¡ã³ãïŒããã«ããããå®è¡ã§ããŸãã
<div th:insert="${user.isAdmin()} ? ~{common :: adminhead} : ~{}">...</div>
ããã«ãã
no-operation ãããŒã¯ã³ã䜿çšããŠãæå®ãããæ¡ä»¶ãæºããããå Žåã«ã®ã¿ãã©ã°ã¡ã³ããæ¿å
¥ã§ããŸãããæ¡ä»¶ãæºããããªãå Žåã¯ããŒã¯ã¢ããã倿Žããã«æ®ããŸãã
<div th:insert="${user.isAdmin()} ? ~{common :: adminhead} : _"> Welcome [[${user.name}]], click <a th:href="@{/support}">here</a> for help-desk support. </div>
ããã«ã
checkExistenceãã©ã°ã䜿çšããŠãã³ãã¬ãŒããªãœãŒã¹ããã§ãã¯ããããã«ãã³ãã¬ãŒããªãŸã«ããŒãæ§æãã
å Žå ããã©ã°ã¡ã³ãèªäœã®ååšãããã©ã«ãæäœã®æ¡ä»¶ãšããŠäœ¿çšã§ããŸãã
<div th:insert="~{common :: salutation} ?: _"> Welcome [[${user.name}]], click <a th:href="@{/support}">here</a> for help-desk support. </div>
8.4ãã³ãã¬ãŒããã©ã°ã¡ã³ãã®åé€
ãµã³ãã«ã¢ããªã±ãŒã·ã§ã³ã«æ»ã£ãŠã補åãªã¹ããã³ãã¬ãŒãã®ææ°ããŒãžã§ã³ãä¿®æ£ããŸãããã
<table> <tr> <th>NAME</th> <th>PRICE</th> <th>IN STOCK</th> <th>COMMENTS</th> </tr> <tr th:each="prod : ${prods}" th:class="${prodStat.odd}? 'odd'"> <td th:text="${prod.name}">Onions</td> <td th:text="${prod.price}">2.41</td> <td th:text="${prod.inStock}? #{true} : #{false}">yes</td> <td> <span th:text="${#lists.size(prod.comments)}">2</span> comment/s <a href="comments.html" th:href="@{/product/comments(prodId=${prod.id})}" th:unless="${#lists.isEmpty(prod.comments)}">view</a> </td> </tr> </table>
ãã®ã³ãŒãã¯åãªããã³ãã¬ãŒããšããŠã¯åªããŠããŸãããéçãªããŒãžãšããŠïŒThymeleafåŠçãè¡ããã«ãã©ãŠã¶ãŒã§çŽæ¥éãããå ŽåïŒè¯ããããã¿ã€ãã«ã¯ãªããŸããã
ãªãã§ïŒ ãã©ãŠã¶ãŒã§ã¯å®å
šã«è¡šç€ºãããŸããããã®ããŒãã«ã«ã¯è¡ã®ã¿ãããããã®è¡ã«ã¯ããŒã¿ã¬ã€ã¢ãŠããããããã§ãã ãããã¿ã€ããšããŠã¯ãçŸå®çã«ã¯èŠããŸãããè€æ°ã®è£œåãå¿
èŠã§ããããå€ãã®ã©ã€ã³ãå¿
èŠã§ãã
ããã§ã¯ãããã€ã远å ããŸãããã
<table> <tr> <th>NAME</th> <th>PRICE</th> <th>IN STOCK</th> <th>COMMENTS</th> </tr> <tr th:each="prod : ${prods}" th:class="${prodStat.odd}? 'odd'"> <td th:text="${prod.name}">Onions</td> <td th:text="${prod.price}">2.41</td> <td th:text="${prod.inStock}? #{true} : #{false}">yes</td> <td> <span th:text="${#lists.size(prod.comments)}">2</span> comment/s <a href="comments.html" th:href="@{/product/comments(prodId=${prod.id})}" th:unless="${#lists.isEmpty(prod.comments)}">view</a> </td> </tr> <tr class="odd"> <td>Blue Lettuce</td> <td>9.55</td> <td>no</td> <td> <span>0</span> comment/s </td> </tr> <tr> <td>Mild Cinnamon</td> <td>1.99</td> <td>yes</td> <td> <span>3</span> comment/s <a href="comments.html">view</a> </td> </tr> </table>
ããŠãä»ã¯3ã€ãããŸããããããã¿ã€ãã«ã¯ééããªãåªããŠããŸãã ããã...ãã®ãã³ãã¬ãŒããThymeleafã§åŠçãããšã©ããªããŸããïŒïŒ
<table> <tr> <th>NAME</th> <th>PRICE</th> <th>IN STOCK</th> <th>COMMENTS</th> </tr> <tr> <td>Fresh Sweet Basil</td> <td>4.99</td> <td>yes</td> <td> <span>0</span> comment/s </td> </tr> <tr class="odd"> <td>Italian Tomato</td> <td>1.25</td> <td>no</td> <td> <span>2</span> comment/s <a href="/gtvg/product/comments?prodId=2">view</a> </td> </tr> <tr> <td>Yellow Bell Pepper</td> <td>2.50</td> <td>yes</td> <td> <span>0</span> comment/s </td> </tr> <tr class="odd"> <td>Old Cheddar</td> <td>18.75</td> <td>yes</td> <td> <span>1</span> comment/s <a href="/gtvg/product/comments?prodId=4">view</a> </td> </tr> <tr class="odd"> <td>Blue Lettuce</td> <td>9.55</td> <td>no</td> <td> <span>0</span> comment/s </td> </tr> <tr> <td>Mild Cinnamon</td> <td>1.99</td> <td>yes</td> <td> <span>3</span> comment/s <a href="comments.html">view</a> </td> </tr> </table>
æåŸã®2è¡ã¯åºå®ãããè¡ã§ãïŒ ãã¡ãããåããã®ã§ããååŸ©ã¯æååã«ã®ã¿é©çšããããããThymeleafãä»ã®2ã€ãåé€ããå¿
èŠã¯ãããŸããã
ãã³ãã¬ãŒãã®åŠçäžã«ãããã®2è¡ãåé€ããæ¹æ³ãå¿
èŠã§ãã 2çªç®ãš3çªç®ã®<tr>ã¿ã°ã§
thïŒremove屿§ã䜿çšããŠã¿ãŸãããã
<table> <tr> <th>NAME</th> <th>PRICE</th> <th>IN STOCK</th> <th>COMMENTS</th> </tr> <tr th:each="prod : ${prods}" th:class="${prodStat.odd}? 'odd'"> <td th:text="${prod.name}">Onions</td> <td th:text="${prod.price}">2.41</td> <td th:text="${prod.inStock}? #{true} : #{false}">yes</td> <td> <span th:text="${#lists.size(prod.comments)}">2</span> comment/s <a href="comments.html" th:href="@{/product/comments(prodId=${prod.id})}" th:unless="${#lists.isEmpty(prod.comments)}">view</a> </td> </tr> <tr class="odd" th:remove="all"> <td>Blue Lettuce</td> <td>9.55</td> <td>no</td> <td> <span>0</span> comment/s </td> </tr> <tr th:remove="all"> <td>Mild Cinnamon</td> <td>1.99</td> <td>yes</td> <td> <span>3</span> comment/s <a href="comments.html">view</a> </td> </tr> </table>
åŠçåŸããã¹ãŠã次ã®ããã«ãªããŸãã
<table> <tr> <th>NAME</th> <th>PRICE</th> <th>IN STOCK</th> <th>COMMENTS</th> </tr> <tr> <td>Fresh Sweet Basil</td> <td>4.99</td> <td>yes</td> <td> <span>0</span> comment/s </td> </tr> <tr class="odd"> <td>Italian Tomato</td> <td>1.25</td> <td>no</td> <td> <span>2</span> comment/s <a href="/gtvg/product/comments?prodId=2">view</a> </td> </tr> <tr> <td>Yellow Bell Pepper</td> <td>2.50</td> <td>yes</td> <td> <span>0</span> comment/s </td> </tr> <tr class="odd"> <td>Old Cheddar</td> <td>18.75</td> <td>yes</td> <td> <span>1</span> comment/s <a href="/gtvg/product/comments?prodId=4">view</a> </td> </tr> </table>
ãããŠããããã®å±æ§ã¯ãã¹ãŠã©ãããæå³ã§ããïŒ
thïŒå€ã¯ã
removeã®åäœãç°ãªãå ŽåããããŸãã
all ïŒã¿ã°ãå«ãã¿ã°ãšãã®ãã¹ãŠã®åã®äž¡æ¹ãåé€ããŸãã
body ïŒå«ãŸããã¿ã°ãåé€ããªãã§ããã®ãã¹ãŠã®åãåé€ããŸãã
tag ïŒå«ãŸããã¿ã°ãåé€ããŸããããã®åã¯åé€ããŸããã
all-but-first ïŒå«ãŸããã¿ã°ã®æåãé€ããã¹ãŠã®åãåé€ããŸãã
none ïŒäœãããŸããã ãã®å€ã¯ãåçè©äŸ¡ã«åœ¹ç«ã¡ãŸãã
all-but-firstã䜿çšãããšäŸ¿å©ãªã®ã¯ãã€ã§ããïŒ ããã«ããããããã¿ã€ããäœæãããšãã«
remove = "all"ãä¿åã§ããŸãã
<table> <thead> <tr> <th>NAME</th> <th>PRICE</th> <th>IN STOCK</th> <th>COMMENTS</th> </tr> </thead> <tbody th:remove="all-but-first"> <tr th:each="prod : ${prods}" th:class="${prodStat.odd}? 'odd'"> <td th:text="${prod.name}">Onions</td> <td th:text="${prod.price}">2.41</td> <td th:text="${prod.inStock}? #{true} : #{false}">yes</td> <td> <span th:text="${#lists.size(prod.comments)}">2</span> comment/s <a href="comments.html" th:href="@{/product/comments(prodId=${prod.id})}" th:unless="${#lists.isEmpty(prod.comments)}">view</a> </td> </tr> <tr class="odd"> <td>Blue Lettuce</td> <td>9.55</td> <td>no</td> <td> <span>0</span> comment/s </td> </tr> <tr> <td>Mild Cinnamon</td> <td>1.99</td> <td>yes</td> <td> <span>3</span> comment/s <a href="comments.html">view</a> </td> </tr> </tbody> </table>
thïŒremove屿§ã¯ãæå¹ãªæååå€ïŒallãtagãbodyãall-but-firstãŸãã¯noneïŒã®ãããããè¿ãå Žåãæšæºã®ThymeleafåŒãåãå
¥ããããšãã§ããŸãã
ããã¯ãããšãã°æ¬¡ã®ããã«ãåé€ãæ¡ä»¶ä»ãã«ããããšãã§ããããšãæå³ããŸãã
<a href="/something" th:remove="${condition}? tag : none">Link text not to be removed</a>
ãŸãã
thïŒremoveã¯
nullã noneã®å矩èªãšèŠãªããããæ¬¡ã®äŸã¯äžèšã®äŸãšåãããã«æ©èœããŸãã
<a href="/something" th:remove="${condition}? tag">Link text not to be removed</a>
ãã®å Žåã
$ {condition}ã falseã®å Žåã
nullãè¿ããããããåé€ã¯å®è¡ãããŸããã