2017-05-10 5 views
0

ユーザーグリッドとその権限を持つページを構築しようとしています。このプロジェクトはSpring MVC Boot + Thymeleafプロジェクトです。バージョン:Thymeleafマップの構文によりTemplateProcessingExceptionが発生する

  1. Thymeleaf 3.0.3
  2. Thymeleafレイアウト方言2.2.1
  3. 春ブーツ1.5.2 は( レイアウト方言バージョンが極端に外であったので、私は春ブーツのThymeleafのバージョンを上書きしなければならなかった注意してください日付)

各ユーザーには、オフィスと複数の役割があります。 RoleDescription、Office、およびUserは、いくつかの文字列を含むPOJOです。私はこのようなコントローラで自分のデータを埋める。

@RequestMapping("/admin/users") 
    public String userGrid(Model model) { 
     MyWebServiceClient myClient = clientFactory.getClient(); 
     List<RoleDescription> roles = myClient.getRoleList(); 
     Map<String, Office> offices = myClient.getOfficeMap(); 
     List<User> users = myClient.getUserRoleGrid(); 
     model.addAttribute("offices", offices); 
     model.addAttribute("roles", roles); 
     model.addAttribute("users", users); 
     return "usergrid"; 
    } 

それから私はこのように私のThymeleafテンプレートページでデータを表示:

 <tbody th:each="user: ${users}" th:with="officeId=${user.officeId},office=${offices[officeId]}"> 
      <tr> 
       <td th:text="${user.fullName}">Fred User</td> 
       <td th:text="${user.userId}">fred</td> 
       <td th:text="${office.name} (${officeId})">Madison, Wisconsin (madison)</td> 
       <th:block th:each="role: ${roles}"> 
        <td th:text="${#lists.contains(user.roles, role)} ? 'yes'"></td> 
       </th:block> 
      </tr> 
     </tbody> 

私はMapオブジェクトから事務所名を取得しようと、offices[officeId]のいくつかのバリエーションを試してみました。 th:withステートメントがない式の完全な形式は、offices[user.officeId].nameのようになります。私はそれがヌルでないことを確認するためにオフィスの地図を投棄した、そしてそれはデータでいっぱいです。

どんなに私は何をすべきか、私はいくつかのバリエーションを取得しない:ちょうどコメント

org.thymeleaf.exceptions.TemplateProcessingException: Could not parse as expression: "${office} (${officeId})"

:数年Freemarkerのでの作業の後、ほとんどの超自然的洞察に満ちたエラーあなたを与えるには十分に成熟になってきましたこれは非常に面倒です。

答えて

0

私はここの問題はth:withだとは思わない。実際には次のステートメント:<td th:text="${office.name} (${officeId})">Madison, Wisconsin (madison)</td>がエラーメッセージと一致しています。私はそれをより読みやすくする/それを修正するために、このような何かにそれを変更することをお勧めします:

<td> 
    <span th:text="${office.name}" /> (<span th:text="${officeId}" />) 
</td> 

または要約する

<td th:text="${office.name + ' (' + officeId + ')'}">Madison, Wisconsin (madison)</td> 
+0

元の構文を保つために:私はそこに括弧を詰まっていてはいけません。私は一時的な括弧の失明があったと思います。 –

+0

私はまた、この文脈では "with"が役に立たないことを発見しました。オフィスの値をリストの最初の値に設定し、行ごとに更新しません。 –

+0

@ k-den 'th:with'はあなたが望むように' th:each 'で動作するはずです...私は自分のテストケースで確認しました。変数を上書きすることができますか? – Metroids

関連する問題