2017-02-14 4 views
0

Thymeleafで同じモデルの複数のインスタンスを防ぐ方法を知りたい場合は、例:ヘッダにユーザ名を表示してください。同じモデルの複数のインスタンスを防ぐ方法

<span th:text="${username}">User Name</span> 

コントローラ:

@RequestMapping(value = "/", method = RequestMethod.GET) 
public String index(Model model) { 
    model.addAttribute("username", "User Name"); 
    return "index.html"; 
} 

@RequestMapping(value = "/admin", method = RequestMethod.GET) 
public String admin(Model model) { 
    model.addAttribute("username", "User Name"); 
    return "indexAdmin.html"; 
} 

@RequestMapping(value = "/page", method = RequestMethod.GET) 
public String page(Model model) { 
    model.addAttribute("username", "User Name"); 
    return "page.html"; 
} 
+1

から除去することができたことが表示されます。 – Apollo

答えて

0

春には、次の操作を実行することができます:

@ModelAttribute("username") 
public String username() { 
    return "User Name"; 
} 

このコードは、囲んで処理されている各要求に対して、「ユーザ名」属性を設定しますコントローラ。モデルオブジェクト自体を含む@RequestMappingメソッドで使用可能なほぼすべてのパラメータにアクセスすることもできます。

上記のコメントで述べたように、特定のユーザーの要求(データベースからフェッチしてモデルにそのインスタンスを設定するなど)を超えてオブジェクトを保持する場合は、@ SessionAttributesハンドラを作成するか、オブジェクトを手動でセッションに追加します。

セッションで、thymeleafでそれにアクセスすることができますので、あなたが反復コードを避けることができますが、ユーザ名を置くことができる「thymeleaf」タグが質問

+0

あなたの返信ありがとう!あなたがsnipedコードで示したように、ユーザ名モデルの属性は常に "User Name"になります。ですから、私は@Apolloのソリューションがより柔軟であると思います。あなたが思うこと? –

+1

あなたの必要に応じて異なります。 2つのオプションがあります。各要求に対してModelAttributeハンドラが呼び出されます。特定のユーザー(セッション)の要求を超えてオブジェクトを保持したい場合は、@ SessionAttributesを使用するか、そのオブジェクトをセッションに手動で入れるだけです。ログインしているユーザーのユーザー名を設定している場合は、ユーザー自身がすでにセッションに入っています(おそらく)でしょうか? – Ivan

関連する問題