2017-03-16 6 views
0

SpringプロジェクトとThymeleafプロジェクトを開発中です。 私は、サーバーに格納されているピクチャのStringを格納する作業クラスを使用してユーザーを構成しました。 正常に動作し、メインブロックで正常に呼び出せます。私のプロジェクトの上部には、htmlのヘッダー部分に記述されているナビゲーションパネルがあります。 layout.html:SpringとThymeleafを使用したJavaプロジェクトのヘッダーセクションのユーザー画像

<!DOCTYPE HTML> 
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4"> 

<head th:include="fragments/head" th:with="pageTitle='Java Project'"></head> 

<body> 

<header th:include="fragments/header"></header> 

<main th:include="${view}"></main> 

<footer th:include="fragments/footer"></footer> 

<span th:include="fragments/scripts-bundle"></span> 

</body> 
</html> 

今は正常に設けられた上部コードに従って、ビューの変数が定義されているメインブロック内user.pictureを呼び出す完全なHTMLは次のようになります。これは、メインブロックで図

:これは実施例である

…… 
<th:block th:each="user : ${users}"> 
    <tr th:class="${user.isAdmin() ? 'info' : null}"> 
    ………… 
    <td> <img class="img-circle" th:src="@{/images/users/{picture}(picture=${user.picture})}" height="43" width="43"/></td> 
……… 
</tr> 
</th:block> 
…… 

ビューは、コントローラ内のコードのこの部分によって呼び出される:

@GetMapping("/") 
public String listUsers(Model model){ 
List<User> users = this.userRepository.findAll(); 

model.addAttribute("users", users); 
model.addAttribute("view", "admin/user/list"); 

return "layout"; 
} 

ユーザクラスIで持っている:

…. 
private String picture; 

public String getPicture() { 
    return picture; 
} 

public void setPicture(String picture) { 
    this.picture = picture; 
} 
….. 

すべてがうまくいきます。

私はビューのように同じコードを呼び出すが、ナビゲーションパネルが記述されているフラグメント/ヘッダーセクションでこれを行う。 これは正常に実行できません。

1/thymeleafビューでコントローラのコードによってユーザーを注入:全てとロックでは動作しません

@GetMapping("/fragments/header") 
@PreAuthorize("isAuthenticated()") 
public String setPicHead(Model model){ 
    UserDetails principal = (UserDetails) SecurityContextHolder.getContext() 
      .getAuthentication() 
      .getPrincipal(); 

    User user = this.userRepository.findByEmail(principal.getUsername()); 

    model.addAttribute("user", user); 
    model.addAttribute("fragments/header", user); 

    return "fragments/header"; 
} 

In the fragments/header html I added: 
<li sec:authorize="isAuthenticated()"> 
    <img class="img-circle" th:src="@{/images/users/(picture=${user.picture})}" height="43" width="43"/> 
</li> 

: のようなものを試してみました、私はこれを行うための2つの方法を参照してください、私のささやかな知識を1として Project全体

2/2番目のアプローチは、Thymeleaf機能を使用してユーザーを個別に呼び出す方法です。 Thymeleafはフルエンジン機能を備えているので、 これを行うことができます。

誰でも私にこれを手伝ってもらえますか? ありがとうございます。

答えて

0

私は解決策を見つけた:

は、ここでは、注射によってそれをしなさい:誰かのシェアならば私も喜んでいるだろう

<li sec:authorize="isAuthenticated()"> 
         <img class="img-circle" th:src="@{/images/users/{one}(one=${user.picture})}" height="49" width="49"/> 
        </li> 

:それはこのようなものですヘッダ部で

@GetMapping("/") 
public String index(Model model) { 

    UserDetails principal = (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); 

    User user = this.userRepository.findByEmail(principal.getUsername()); 

    model.addAttribute("user", user); 
    model.addAttribute("view", "home/index"); 

    return "layout"; 
} 

をThymeleafで直接認証されたソリューション

関連する問題