私はSpringブートとThymeleafを使用して、 私のアプリケーション用の1つのランディングページを作成しています。このためには、すべての にコンテナが含まれているホストオブジェクトのリストをレンダリングする必要があります。spring boot/thymeleafネストループオブジェクトへのアクセス
public class Container {
private String name;
private String baseUrl;
private String status;
public Container(String name, String baseUrl, String status) {
this.name = name;
this.baseUrl = baseUrl;
this.status = status;
}
public String getName() { return name; }
public String getBaseUrl() { return baseUrl; }
public String getStatus() { return status; }
}
public class Host {
private HashMap<String, Container> containers;
....
public List<Container> getContainers() {
return containers.values();
}
}
@RequestMapping("/")
public class IndexController {
@RequestMapping("/")
public String getIndex(Model model) {
model.addAttribute("hosts", hostRepository.getAllServers());
return "index";
}
}
は今、私はすべてのサーバーを反復処理し、テーブル内の各コンテナに関する情報を表示したい: はここに関連するコードです。 マイThymeleafのテンプレートは次のようになります。
<div class="panel panel-default" th:each="host : ${hosts}">
<div class="panel-heading">
<b th:text="${host.name}">Host X</b>
<div class="panel-body">
<table class="table">
<thead>
<tr>
<th>Name</th>
<th>URL</th>
<th>Status</th>
</tr>
</thead>
<tbody>
<tr th:each="container : ${host.getContainers()}">
<!-- HERE IS THE PROBLEM -->
<td th:text="${container.name}">Service1</td>
<td th:text="${container.baseUrl}">domain.com/api/url</td>
<td th:text="${container.status}">RUNNING</td>
<!-- HERE ENDS THE PROBLEM -->
</tr>
</tbody>
</table>
</div>
</div>
</div>
私の問題は、(解説でマーク)コンテナのプロパティにアクセスされる部分です。 私はSpringEL例外が発生するたびに。 th:text="${container.xy}"
を削除してth:text="${container}
に置き換えると、オブジェクトへのアクセス権とループが正しく機能するように、文字列型のコンテナが表示されます。フィールドアクセスをgetter(たとえばgetStatus()
)に置き換えようとしましたが、これも機能しません。
ありがとうございました。より多くの情報が必要な場合は、お気軽にお問い合わせください。
セットアップ:
- のJava 8
- 春ブーツスターターウェブ
- Thymeleaf
編集:例外がスローされます。35最初の問題の行です:インデックスはnested exception is org.thymeleaf.exceptions.TemplateProcessingException: Exception evaluating SpringEL expression: "container.name" (index:35)
。
${container}
を使用するときのtoString()出力は[email protected]
で、jenkinsはContainerインスタンスのname
属性です。
解決策ネストされたループがリストの代わりにマップを反復しているように見えました。 ${container.xy}
から${container.getValue().xy}
に変更すると問題が解決しました。
** **例外は何ですか?これは、 '.xy'をドロップしたときに正しい' toString'出力が得られれば、SpEL式にタイプミスがある可能性が最も高いと言えます。 – chrylis
$ {host.getContainer()}は$ {host.getContainers()}にする必要があります。 –
@TommySchmidtクラス内のタイプミスを修正しました。 – teekay