Thymeleaf 在html中创建地图

Thymeleaf 在html中创建地图,thymeleaf,Thymeleaf,目前,我已经创建了一个片段,其中包含属性和URL列表,以便创建菜单: menuFrag (thymeleafMap) 我想在前端填充它,但我不知道如何直接在百里香叶中制作 <div th:replace="fragments/menu :: menuFrag ((<#{menu.item1},@(/menuItem1)><(#{menu.item2},@(/menuItem2)>))"></div> 有没有办法做到这一点,或者我必须将这些

目前,我已经创建了一个片段,其中包含属性和URL列表,以便创建菜单:

menuFrag (thymeleafMap)
我想在前端填充它,但我不知道如何直接在百里香叶中制作

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

有没有办法做到这一点,或者我必须将这些信息从控制器传下来


另外,如果有一种方法可以让我只传入两个数组,那也行。

我希望我正确理解你的问题

首先,您可以创建一个
地图
,键是菜单名(
{menu.item1}
),值是旅程开始的控制器中的URL(
@(/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);
<div th:include="menu :: copy(${menuMap})"></div>
<div th:replace="fragments/menu :: menuFrag (menu=${ {{item:'Item1',url:'/menuItem1'},{item:'Item2',url:'/menuItem2'}} })"></div>
<ul th:each="item: $(menu)">
  <li><a th:text="${item.item}" th:href="@{${item.url}}" />Item</li>
</ul>
在第二个模板中,
menu
fragment获取从
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>
...
。。。
你好,世界
...

就这样,您就可以使用菜单了。

实际上可以在thymeleaf中编写映射文字,如下所示:

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);
<div th:include="menu :: copy(${menuMap})"></div>
<div th:replace="fragments/menu :: menuFrag (menu=${ {{item:'Item1',url:'/menuItem1'},{item:'Item2',url:'/menuItem2'}} })"></div>
<ul th:each="item: $(menu)">
  <li><a th:text="${item.item}" th:href="@{${item.url}}" />Item</li>
</ul>

(请注意,它实际上是一个嵌套到列表中的映射,以便能够在外部列表上迭代。根据我的观察,Thymeleaf(或者我应该说SpringEL)似乎为映射生成LinkedHashMap,并为列表生成ArrayList)

然后,您可以像这样迭代菜单片段中的项目:

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);
<div th:include="menu :: copy(${menuMap})"></div>
<div th:replace="fragments/menu :: menuFrag (menu=${ {{item:'Item1',url:'/menuItem1'},{item:'Item2',url:'/menuItem2'}} })"></div>
<ul th:each="item: $(menu)">
  <li><a th:text="${item.item}" th:href="@{${item.url}}" />Item</li>
</ul>
  • 项目

是的,读了之后,我的问题可能不是很清楚。我希望能够直接在.html页面上创建地图,而不必通过控制器传入。因此,在thymeleaf中创建一个地图,而不必接触任何控制器。在做了一点研究之后,我不确定这是否可能。你是对的,在thymeleaf中,你不可能创建一张地图。你为什么要这么做?用户可以看到或看不到的逻辑可以通过控制器进行控制。但是在html中创建地图的另一个解决方案是通过javascript。我有一个菜单片段,可以在多个页面上共享。我想它是动态的,取决于你在哪一页。我能想到的最好的方法是将一个映射传递到菜单片段中,我真的不想从控制器中传递它。也许我会看看javascript。