SpringMVCデータとThymeleaf
1. 序章
このチュートリアルでは、Thymeleafを使用してSpringMVCデータにアクセスするさまざまな方法について説明します。
まず、Thymeleafを使用して電子メールテンプレートを作成し、Springアプリケーションからのデータを使用してテンプレートを拡張します。
2. プロジェクトの設定
まず、Thymeleaf依存関係を追加する必要があります。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
<version>2.6.1</version>
</dependency>
次に、Spring BootWebスターターを含めましょう。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.6.1</version>
</dependency>
この依存関係は、後でいくつかのエンドポイントを作成するために使用するRESTサポートを提供します。
サンプルケースをカバーするためにいくつかのThymeleafテンプレートを作成し、それらを resources /mvcdataに保存します。 チュートリアルの各セクションでは、異なるテンプレートを実装します。
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<!-- data -->
</html>
最後に、ビジネスロジックを格納するコントローラークラスを実装する必要があります。
@Controller
public class EmailController {
private ServletContext servletContext;
public EmailController(ServletContext servletContext) {
this.servletContext = servletContext;
}
}
コントローラクラスは常にサーブレットコンテキストに依存するわけではありませんが、後で特定のThymeleaf機能を示すことができるように、ここに追加します。
3. モデル属性
モデル属性は、ビュー内でレンダリングするためのデータを準備するコントローラークラス内で使用されます。
モデルに属性を追加する1つの方法は、コントローラーメソッドのパラメーターとしてModelのインスタンスを要求することです。
emailDataを属性として渡します。
@GetMapping(value = "/email/modelattributes")
public String emailModel(Model model) {
model.addAttribute("emailData", emailData);
return "mvcdata/email-model-attributes";
}
/ email / modelattributes が要求されると、SpringはModelのインスタンスを挿入します。
次に、Thymeleaf式でemailDataモデル属性を参照できます。
<p th:text="${emailData.emailSubject}">Subject</p>
これを行うもう1つの方法は、 @ModelAttribute を使用して、ビューで必要な属性をSpringコンテナーに通知することです。
@ModelAttribute("emailModelAttribute")
EmailData emailModelAttribute() {
return emailData;
}
そして、ビュー内のデータを次のように表すことができます。
<p th:each="emailAddress : ${emailModelAttribute.getEmailAddresses()}">
<span th:text="${emailAddress}"></span>
</p>
モデルデータのその他の例については、Spring MVCチュートリアルのModel、ModelMap、およびModelViewを確認してください。
4. リクエストパラメータ
データにアクセスする別の方法は、リクエストパラメータによるものです。
@GetMapping(value = "/email/requestparameters")
public String emailRequestParameters(
@RequestParam(value = "emailsubject") String emailSubject) {
return "mvcdata/email-request-parameters";
}
一方、テンプレートでは、キーワード param を使用して、データを含むパラメーターを指定する必要があります。
<p th:text="${param.emailsubject}"></p>
同じ名前の複数のリクエストパラメータを設定することもできます。
@GetMapping(value = "/email/requestparameters")
public String emailRequestParameters(
@RequestParam(value = "emailsubject") String emailSubject,
@RequestParam(value = "emailaddress") String emailAddress1,
@RequestParam(value = "emailaddress") String emailAddress2) {
return "mvcdata/email-request-parameters";
}
次に、データを表示するための2つのオプションがあります。
まず、 th:each を使用して、同じ名前の各パラメーターを調べます。
<p th:each="emailaddress : ${param.emailaddress}">
<span th:text="${emailaddress}"></span>
</p>
次に、パラメータ配列のインデックスを使用できます。
<p th:text="${param.emailaddress[0]}"></p>
<p th:text="${param.emailaddress[1]}"></p>
5. セッション属性
または、データをHttpSession属性に配置することもできます。
@GetMapping("/email/sessionattributes")
public String emailSessionAttributes(HttpSession httpSession) {
httpSession.setAttribute("emaildata", emailData);
return "mvcdata/email-session-attributes";
}
次に、リクエストパラメータと同様に、sessionキーワードを使用できます。
<p th:text="${session.emaildata.emailSubject}"></p>
6. ServletContext属性
ServletContext では、式を使用してemailDataのプロパティにアクセスすることはできません。
これを回避するために、各値を個別の属性として渡します。
@GetMapping("/email/servletcontext")
public String emailServletContext() {
servletContext.setAttribute("emailsubject", emailData.getEmailSubject());
servletContext.setAttribute("emailcontent", emailData.getEmailBody());
servletContext.setAttribute("emailaddress", emailData.getEmailAddress1());
servletContext.setAttribute("emaillocale", emailData.getEmailLocale());
return "mvcdata/email-servlet-context";
}
次に、servletContext変数を介してそれぞれを取得できます。
<p th:text="${#servletContext.getAttribute('emailsubject')}"></p>
7. 豆
最後に、コンテキストBeanを使用してデータを提供することもできます。
@Bean
public EmailData emailData() {
return new EmailData();
}
Thymeleafは、@beanName構文を使用したBeanアクセスを許可します。
<p th:text="${@emailData.emailSubject}"></p>
8. 結論
この小さなチュートリアルでは、Thymeleafを介してデータにアクセスする方法を学びました。
まず、適切な依存関係を追加しました。 次に、テンプレートにデータを渡すことができるように、いくつかのRESTメソッドを実装しました。
いつものように、コードはGitHubでから入手できます。