{"id":1132,"date":"2025-01-07T12:11:27","date_gmt":"2025-01-07T03:11:27","guid":{"rendered":"https:\/\/route-zero.com\/recruit\/route\/1132\/"},"modified":"2025-04-07T12:16:49","modified_gmt":"2025-04-07T03:16:49","slug":"1132","status":"publish","type":"route","link":"https:\/\/route-zero.com\/recruit\/route\/1132\/","title":{"rendered":"Thymeleaf\u3067\u300c$\u300d\u300c@\u300d\u300c*\u300d\u306f\u3069\u3046\u9055\u3046\uff1f\u521d\u5fc3\u8005\u3067\u3082\u308f\u304b\u308b\u4f7f\u3044\u5206\u3051\u5b8c\u5168\u30ac\u30a4\u30c9"},"content":{"rendered":"<div>\n<h2>\u305d\u306e\u8a18\u53f7\u3001\u306a\u3093\u306e\u610f\u5473\u304c\u3042\u308b\u306e\uff1f<\/h2>\n<p>Spring Boot\u3067Web\u30a2\u30d7\u30ea\u3092\u4f5c\u3063\u3066\u3044\u308b\u3068\u3001HTML\u306b\u898b\u6163\u308c\u306a\u3044\u3053\u3093\u306a\u8a18\u8ff0\u304c\u51fa\u3066\u304d\u307e\u305b\u3093\u304b\uff1f<\/p>\n<pre><code>&lt;p th:text=<span>\"${user.name}\"<\/span>&gt;\u540d\u524d&lt;\/p&gt;\r\n&lt;img th:src=<span>\"@{\/images\/logo.png}\"<\/span> \/&gt;\r\n&lt;option th:<span>value<\/span>=<span>\"*{id}\"<\/span>&gt;...&lt;\/option&gt;<\/code><\/pre>\n<p>\u300c\u3053\u308c\u3001\u306a\u3093\u304b\u8a18\u53f7\u591a\u3059\u304e\u306a\u3044\u2026\u2026\uff1f\u300d<br \/>\u521d\u5fc3\u8005\u306a\u3089\u305a\u3068\u3082\u3001$ \u3084 @\u3001* \u306a\u3069\u3001<strong>Thymeleaf\u7279\u6709\u306e\u8a18\u53f7\u306e\u610f\u5473\u3084\u4f7f\u3044\u5206\u3051<\/strong>\u306b\u60a9\u3093\u3060\u7d4c\u9a13\u3001\u3042\u308a\u307e\u305b\u3093\u304b\uff1f<\/p>\n<p>\u3053\u306e\u8a18\u4e8b\u3067\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u7591\u554f\u306b\u304a\u7b54\u3048\u3057\u307e\u3059\uff1a<\/p>\n<ul>\n<li>\n<p>th:text=&#8221;${&#8230;}&#8221;\u306e $ \u306e\u610f\u5473\u306f\uff1f<\/p>\n<\/li>\n<li>\n<p>@{\/&#8230;} \u3068 \/&#8230; \u306e\u9055\u3044\u306f\uff1f<\/p>\n<\/li>\n<li>\n<p>*{&#8230;} \u3068 ${&#8230;} \u306e\u9055\u3044\u3063\u3066\uff1f<\/p>\n<\/li>\n<\/ul>\n<p><strong>Thymeleaf\u306e\u8a18\u53f7\u306e\u610f\u5473\u3068\u6b63\u3057\u3044\u4f7f\u3044\u65b9<\/strong>\u3092\u3001\u5177\u4f53\u4f8b\u3068\u56f3\u89e3\u3067\u5fb9\u5e95\u7684\u306b\u89e3\u8aac\u3057\u3066\u3044\u304d\u307e\u3059\uff01<\/p>\n<hr>\n<h2>Thymeleaf\u306e\u300c\u8a18\u53f7\u305f\u3061\u300d\u3092\u3072\u3068\u3064\u305a\u3064\u89e3\u8aac<\/h2>\n<p>Thymeleaf\u306e\u8a18\u53f7\u306e\u5f79\u5272\u306f\u3001\u4ee5\u4e0b\u306e3\u3064\u304c\u57fa\u672c\u3067\u3059\u3002<\/p>\n<ul>\n<li>\n<p>\u300c$\u300d\uff1a<strong>\u5909\u6570\u53c2\u7167\uff08\u30b9\u30b3\u30fc\u30d7\u5185\uff09<\/strong><\/p>\n<\/li>\n<li>\n<p>\u300c@\u300d\uff1a<strong>URL\u30ea\u30f3\u30af\u306e\u89e3\u6c7a<\/strong><\/p>\n<\/li>\n<li>\n<p>\u300c*\u300d\uff1a<strong>\u30d5\u30a9\u30fc\u30e0\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0\u6642\u306e\u5909\u6570\u53c2\u7167<\/strong><\/p>\n<\/li>\n<\/ul>\n<h3>1. ${&#8230;}\uff1a\u5909\u6570\u3092\u53c2\u7167\u3059\u308b\u305f\u3081\u306e\u8a18\u53f7<\/h3>\n<p>\u3082\u3063\u3068\u3082\u3088\u304f\u4f7f\u3046\u306e\u304c\u3053\u308c\u3067\u3059\u3002<\/p>\n<pre><code>&lt;p th:text=<span>\"${user.name}\"<\/span>&gt;\u540d\u524d&lt;<span>\/p&gt;<\/span><\/code><\/pre>\n<p>\u3053\u308c\u306f\u3001\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u304b\u3089\u6e21\u3055\u308c\u305f\u30e2\u30c7\u30eb\u5c5e\u6027\uff08Model\uff09\u3092\u53c2\u7167\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u00a0\u4f8b\uff1a\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u5074<\/p>\n<pre><code><span>@GetMapping<\/span>(<span>\"\/profile\"<\/span>)\r\n<span><span>public<\/span> String <span>profile<\/span><span>(Model model)<\/span> <\/span>{\r\n    model.addAttribute(<span>\"user\"<\/span>, <span>new<\/span> User(<span>\"\u7530\u4e2d \u592a\u90ce\"<\/span>));\r\n    <span>return<\/span> <span>\"profile\"<\/span>;\r\n}<\/code><\/pre>\n<p>\u4f8b\uff1aThymeleaf\u5074<\/p>\n<pre><code>&lt;p th:text=<span>\"${user.name}\"<\/span>&gt;\u540d\u524d&lt;<span>\/p&gt;<\/span><\/code><\/pre>\n<p>\u3053\u306e\u5834\u5408\u3001${user.name} \u306f User \u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e name \u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u53c2\u7167\u3057\u307e\u3059\u3002<\/p>\n<hr>\n<h3>2. @{&#8230;}\uff1aURL\u3092\u751f\u6210\u3059\u308b\u8a18\u53f7<\/h3>\n<p>Thymeleaf\u306fSpring MVC\u3068\u9023\u643a\u3057\u3066\u3001<strong>\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u4ed8\u304d\u306eURL\u3092\u81ea\u52d5\u3067\u751f\u6210<\/strong>\u3067\u304d\u307e\u3059\u3002<\/p>\n<pre><code>&lt;a th:href=<span>\"@{\/users}\"<\/span>&gt;\u30e6\u30fc\u30b6\u30fc\u4e00\u89a7&lt;<span>\/a&gt;<\/span><\/code><\/pre>\n<p>\u5909\u6570\u4ed8\u304dURL\u306e\u4f8b<\/p>\n<pre><code>&lt;a th:href=<span>\"@{\/user\/{id}(id=${user.id})}\"<\/span>&gt;\u8a73\u7d30\u3092\u898b\u308b&lt;<span>\/a&gt;<\/span><\/code><\/pre>\n<p>\u51fa\u529b\u3055\u308c\u308bURL\u4f8b<\/p>\n<h3>3. *{&#8230;}\uff1a\u30d5\u30a9\u30fc\u30e0\u3068\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0\u3055\u308c\u305f\u5909\u6570\u53c2\u7167<\/h3>\n<p>\u3053\u308c\u306f\u4e3b\u306b\u30d5\u30a9\u30fc\u30e0\u5165\u529b\u3068\u30d0\u30a4\u30f3\u30c9\u3059\u308b\u969b\u306b\u4f7f\u3044\u307e\u3059\u3002<\/p>\n<pre><code>&lt;input <span>type<\/span>=<span>\"text\"<\/span> th:field=<span>\"*{username}\"<\/span> \/&gt;<\/code><\/pre>\n<p>\u80cc\u666f\uff1a\u30d5\u30a9\u30fc\u30e0\u3067\u30d0\u30a4\u30f3\u30c9\u3055\u308c\u305f\u5909\u6570\u306f\u3069\u3053\u306b\uff1f<\/p>\n<pre><code><span>@GetMapping<\/span>(<span>\"\/register\"<\/span>)\r\n<span><span>public<\/span> String <span>form<\/span><span>(Model model)<\/span> <\/span>{\r\n    model.addAttribute(<span>\"userForm\"<\/span>, <span>new<\/span> UserForm());\r\n    <span>return<\/span> <span>\"register\"<\/span>;\r\n}<\/code><\/pre>\n<pre><code>&lt;form th:<span>object<\/span>=<span>\"${userForm}\"<\/span>&gt;\r\n    &lt;input type=<span>\"text\"<\/span> th:field=<span>\"*{username}\"<\/span> \/&gt;\r\n&lt;\/form&gt;<\/code><\/pre>\n<h3>\u00a0th:object\u306e\u672c\u8cea\uff1a\u300c\u53c2\u7167\u5143\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u5207\u308a\u66ff\u3048\u308b\u300d<\/h3>\n<p>th:object \u306f\u3001<strong>\u6307\u5b9a\u3055\u308c\u305f\u30bf\u30b0\u914d\u4e0b\u306b\u304a\u3051\u308b\u53c2\u7167\u5143\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u5909\u66f4\u3059\u308b\u305f\u3081\u306e\u5c5e\u6027<\/strong>\u3067\u3059\u3002<\/p>\n<pre><code>&lt;form th:object=<span>\"${userForm}\"<\/span>&gt;\r\n    &lt;input <span>type<\/span>=<span>\"text\"<\/span> th:field=<span>\"*{username}\"<\/span> \/&gt;\r\n    &lt;input <span>type<\/span>=<span>\"email\"<\/span> th:field=<span>\"*{email}\"<\/span> \/&gt;\r\n&lt;<span>\/form&gt;<\/span><\/code><\/pre>\n<ul>\n<li>\n<p>*{username} \u2192 userForm.getUsername()<\/p>\n<\/li>\n<li>\n<p>*{email} \u2192 userForm.getEmail()<\/p>\n<\/li>\n<\/ul>\n<h3>\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u304b\u3089\u6e21\u3059\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u30a4\u30e1\u30fc\u30b8\u3092\u3064\u304b\u3082\u3046<\/h3>\n<pre><code><span>public<\/span> <span>class<\/span> UserForm {\r\n    <span>private<\/span> <span>String<\/span> username;\r\n    <span>private<\/span> <span>String<\/span> email;\r\n\r\n    <span>public<\/span> <span>String<\/span> getUsername() { <span>return<\/span> username; }\r\n    <span>public<\/span> <span>void<\/span> setUsername(<span>String<\/span> username) { <span>this<\/span>.username = username; }\r\n\r\n    <span>public<\/span> <span>String<\/span> getEmail() { <span>return<\/span> email; }\r\n    <span>public<\/span> <span>void<\/span> setEmail(<span>String<\/span> email) { <span>this<\/span>.email = email; }\r\n}<\/code><\/pre>\n<hr>\n<h2>\u4f7f\u3044\u5206\u3051\u3067\u8ff7\u3063\u305f\u3089\uff1f\u3088\u304f\u3042\u308b\u30df\u30b9\u3068\u5bfe\u51e6\u6cd5<\/h2>\n<h3>\u300c*{}\u3068${}\u306e\u3069\u3063\u3061\u3092\u4f7f\u3048\u3070\u3044\u3044\u306e\uff1f\u300d<\/h3>\n<ul>\n<li>\n<p>\u901a\u5e38\u306e\u5909\u6570\u53c2\u7167 \u2192 ${} \u3092\u4f7f\u3046<\/p>\n<\/li>\n<li>\n<p>\u30d5\u30a9\u30fc\u30e0\u306b\u30d0\u30a4\u30f3\u30c9\u3055\u308c\u3066\u3044\u308b\u5834\u5408 \u2192 *{} \u3092\u4f7f\u3046<\/p>\n<\/li>\n<\/ul>\n<h3>before \/ after \u3067\u30c1\u30a7\u30c3\u30af\uff01<\/h3>\n<p>\u00d7\u9593\u9055\u3063\u305f\u4f7f\u3044\u65b9\uff1a<\/p>\n<pre><code>&lt;form th:<span>object<\/span>=<span>\"${userForm}\"<\/span>&gt;\r\n    &lt;input th:field=<span>\"${username}\"<\/span> \/&gt; &lt;!-- NG! --&gt;\r\n&lt;\/form&gt;<\/code><\/pre>\n<p>\u25ef\u6b63\u3057\u3044\u4f7f\u3044\u65b9\uff1a<\/p>\n<pre><code>&lt;form th:<span>object<\/span>=<span>\"${userForm}\"<\/span>&gt;\r\n    &lt;input th:field=<span>\"*{username}\"<\/span> \/&gt;\r\n&lt;\/form&gt;<\/code><\/pre>\n<hr>\n<h2>\u8a18\u53f7\u306e\u4f7f\u3044\u5206\u3051\u3092\u30de\u30b9\u30bf\u30fc\u3057\u3088\u3046<\/h2>\n<ul>\n<li>\n<p>${&#8230;}\uff1a\u5909\u6570\u53c2\u7167 \u2192 \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u304b\u3089\u6e21\u3055\u308c\u305f\u30e2\u30c7\u30eb\u30c7\u30fc\u30bf\u3092\u53c2\u7167<\/p>\n<\/li>\n<li>\n<p>@{&#8230;}\uff1aURL\u751f\u6210 \u2192 \u30d1\u30b9\u3084\u30d1\u30e9\u30e1\u30fc\u30bf\u4ed8\u304dURL\u3092\u5b89\u5168\u306b\u751f\u6210<\/p>\n<\/li>\n<li>\n<p>*{&#8230;}\uff1a\u30d5\u30a9\u30fc\u30e0\u5165\u529b\u7528 \u2192 th:object \u306b\u30d0\u30a4\u30f3\u30c9\u3057\u305f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u53c2\u7167<\/p>\n<\/li>\n<\/ul>\n<hr>\n<h2>\u6b21\u306e\u30b9\u30c6\u30c3\u30d7\u306f\uff1f<\/h2>\n<p>\u300c\u8a18\u53f7\u306e\u4f7f\u3044\u5206\u3051\u300d\u306fThymeleaf\u306e\u7b2c\u4e00\u6b69\u3067\u3059\u3002\u6b21\u306f\u4ee5\u4e0b\u306e\u30c6\u30fc\u30de\u306b\u3082\u6311\u6226\u3057\u3066\u307f\u307e\u3057\u3087\u3046\uff01<\/p>\n<ul>\n<li>\n<p>th:each \u3092\u4f7f\u3063\u305f\u7e70\u308a\u8fd4\u3057\u51e6\u7406\u306e\u66f8\u304d\u65b9<\/p>\n<\/li>\n<li>\n<p>th:if \u3084 th:switch \u3092\u4f7f\u3063\u305f\u6761\u4ef6\u5206\u5c90<\/p>\n<\/li>\n<li>\n<p>\u5165\u529b\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u306e\u5b9f\u88c5\u3068\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u8868\u793a<\/p>\n<\/li>\n<\/ul>\n<h3>\u3010\u5916\u90e8\u30ea\u30f3\u30af\u3011<\/h3>\n<p><a href=\"https:\/\/spring.io\/guides\/gs\/serving-web-content\/\">Spring Framework\u516c\u5f0f\u30ac\u30a4\u30c9 \u2013 Spring MVC<\/a><\/p>\n<p><a href=\"https:\/\/www.thymeleaf.org\/doc\/tutorials\/3.0\/usingthymeleaf_ja.html\">Thymeleaf\u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb \u2013 Spring\u516c\u5f0f<\/a><\/p>\n<h3>\u3010\u5185\u90e8\u30ea\u30f3\u30af\u3011<\/h3>\n<p><a href=\"https:\/\/route-zero.com\/recruit\/route\/1071\/\">Thymeleaf\u306e\u300cth:field\u300d\u3068\u306f\u4f55\u304b<\/a><\/p>\n<p><a href=\"https:\/\/route-zero.com\/recruit\/route\/1088\/\">Spring Boot\u30a2\u30d7\u30ea\u958b\u767a\u3067\u983b\u767a\u3059\u308bWhitelabel Error Page\uff5cThymeleaf\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30a8\u30e9\u30fc\u3068\u5bfe\u7b56\u307e\u3068\u3081<\/a><\/p>\n<\/div>\n","protected":false},"featured_media":1133,"template":"","_links":{"self":[{"href":"https:\/\/route-zero.com\/recruit\/wp-json\/wp\/v2\/route\/1132"}],"collection":[{"href":"https:\/\/route-zero.com\/recruit\/wp-json\/wp\/v2\/route"}],"about":[{"href":"https:\/\/route-zero.com\/recruit\/wp-json\/wp\/v2\/types\/route"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/route-zero.com\/recruit\/wp-json\/wp\/v2\/media\/1133"}],"wp:attachment":[{"href":"https:\/\/route-zero.com\/recruit\/wp-json\/wp\/v2\/media?parent=1132"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}