目前我已创建了一个片段,该片段包含属性和网址列表以创建菜单:
menuFrag (thymeleafMap)
我想在前端填充这个,但我不确定如何直接在百里香叶中制作
<div th:replace="fragments/menu :: menuFrag ((<#{menu.item1},@(/menuItem1)><(#{menu.item2},@(/menuItem2)>))"></div>
有没有办法做到这一点,还是我必须从控制器传递这些信息?
此外,如果有一种方法可以让我传入两个也可以使用的阵列。
答案 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>
...
就是这样,你可以得到你的菜单。