2016-10-26 13 views
0

私はappを持っています。これはSpring Bookmarkチュートリアルの簡略版です。その中で、コントローラは@RestControllerと注釈され、アプリはJSONだけを返します。SpringブートとThymeleafはテンプレートを生成しません

私はThymeleafテンプレート経由でHTMLを返す機能を追加しました。私のテンプレートは返されていますが、Thymeleafは処理していないようです。私はスプリングブートを使用していますが、build.gradlefileにはspring-boot-starter-thymeleafがありますが、これでは十分ではありません。

例えば、ここではルートのためのシンプルなコントローラです:

package com.latencyzero.hoa; 

import org.springframework.stereotype.Controller; 

import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.bind.annotation.RestController; 
import org.springframework.web.servlet.ModelAndView; 



@Controller 
@RequestMapping("/") 
class 
MainController 
{ 
    @RequestMapping(method = RequestMethod.GET) 
    ModelAndView 
    index() 
    { 
     ModelAndView mav = new ModelAndView("index"); 
     mav.addObject("version", "0.1"); 
     return mav; 
    } 
} 

src/main/resources/templates/index.html

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"/> 
    <title>HOA v${version}</title> 
</head> 
<body> 
<h1>HOA v${version}</h1> 
</body> 
</html> 

レンダリングされている以下のページでの結果:

enter image description here

私が見つけた例では、これはすべてです私はする必要がありますが、それは動作していません。どこかに追加の設定注釈が必要ですか?

ありがとうございました。

+1

'それのために。 –

+0

文書から、 '@ RestController'は' @ContactBody'を持つ '@Controller'です。それにもかかわらず、 '@ Controller'では動作しません。 – Rick

+1

正しい。これは、すべてのメソッドの戻り値がmarshallerになり、ビュー解決メカニズムに渡されないことを意味します。あなたの質問といくつかの設定にコントローラを追加してください... –

答えて

1

これらは式

をインライン化Thymeleaf Tutorials

に基づいて2つのオプションです - MainController.java

package com.latencyzero.hoa; 

import org.springframework.stereotype.Controller;  
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.bind.annotation.RestController; 
import org.springframework.web.servlet.ModelAndView; 

@Controller 
@RequestMapping("/") 
class MainController 
{ 
    @RequestMapping(method = RequestMethod.GET) 
    ModelAndView 
    index() 
    { 
     ModelAndView mav = new ModelAndView("index"); 
     mav.addObject("version", "0.1"); 
     return mav; 
    } 
} 


から

<!DOCTYPE html> 
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml"> 
<head> 
    <meta charset="UTF-8"/> 
    <title>HOA v[[${version}]]</title> 
</head> 
<body> 
<h1>HOA v[[${version}]]</h1> 
</body> 
</html> 
index.htmlを

ナチュラルテンプレート

- MainController.java

package com.latencyzero.hoa; 

import org.springframework.stereotype.Controller;  
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.bind.annotation.RestController; 
import org.springframework.web.servlet.ModelAndView; 

@Controller 
@RequestMapping("/") 
class MainController 
{ 
    @RequestMapping(method = RequestMethod.GET) 
    ModelAndView 
    index() 
    { 
     ModelAndView mav = new ModelAndView("index"); 
     mav.addObject("hoa_version", "HOA v0.1"); 
     return mav; 
    } 
} 


- index.htmlをRestController`は、あなたが `@Controller必要動作しません@

<!DOCTYPE html> 
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml"> 
<head> 
    <meta charset="UTF-8"/> 
    <title th:text="${hoa_version}">Default Title</title> 
</head> 
<body> 
<h1 th:text="${hoa_version}">Default Header</h1> 
</body> 
</html> 
+0

ありがとう。実際には動作しますが、Thymeleafはコード内のどこでも式を拡張することはできません。 – Rick

関連する問題