在Thymeleaf html中创建一个地图

时间:2014-11-20 16:15:00

标签: thymeleaf

目前我已创建了一个片段,该片段包含属性和网址列表以创建菜单:

menuFrag (thymeleafMap)

我想在前端填充这个,但我不确定如何直接在百里香叶中制作

<div th:replace="fragments/menu :: menuFrag ((<#{menu.item1},@(/menuItem1)><(#{menu.item2},@(/menuItem2)>))"></div> 

有没有办法做到这一点,还是我必须从控制器传递这些信息?

此外,如果有一种方法可以让我传入两个也可以使用的阵列。

2 个答案:

答案 0 :(得分:8)

实际上可以在百里香中写出地图文字,如下所示:

<div th:replace="fragments/menu :: menuFrag (menu=${ {{item:'Item1',url:'/menuItem1'},{item:'Item2',url:'/menuItem2'}} })"></div>

(注意它实际上是一个嵌套到列表中的映射,能够迭代外层.Thymeleaf(或者我应该说SpringEL)似乎根据我的观察结果为地图生成了LinkedHashMap,并为列表生成了ArrayList )

然后,您可以迭代菜单片段中的项目,如下所示:

<ul th:each="item: $(menu)">
  <li><a th:text="${item.item}" th:href="@{${item.url}}" />Item</li>
</ul>

答案 1 :(得分:0)

我希望我理解你的问题。

首先,您可以创建一个Map<key, value>,键是菜单名称(#{menu.item1}),值是控制器中旅程开始的网址(@(/menuItem1))。

控制器看起来像这样:

Map<String, String> menu = new HashMap<String, String>();
menu.put("Google", "www.google.de");
menu.put("Yahoo", "www.yahoo.de");
menu.put("Apple", "www.apple.de");
menu.put("Microsoft", "www.microsoft.de");
model.addAttribute("menuMap", menu);

其次,您有两个模板,第一个是main,第二个是menu片段。在主要内容中,您必须从控制器“访问”地图并调用“菜单”片段,如下所示:

<div th:include="menu :: copy(${menuMap})"></div>

在第二个模板menu片段中,您获取从main获取的地图并对其进行迭代,如下所示:

...
<div th:fragment="copy(menuMap)" >
    Hello World
    <ul th:each="instance : ${menuMap}">
       <li><a th:text="${instance.key}" th:href="@{${instance.value}}">key</a></li>
    </ul>
</div>
...

就是这样,你可以得到你的菜单。