gpt4 book ai didi

java - Thymeleaf Map 迭代和映射键中的非英语字符

转载 作者:太空宇宙 更新时间:2023-11-04 13:01:09 24 4
gpt4 key购买 nike

我有 Spring、Thymeleaf、HTML5 网页。如果 map 对象包含非英语字符,则迭代 Map 时会出现问题。

  1. 所有字符编码过滤器/解析器/转换器均已设置并强制为 UTF-8

假设我有以下设置:

Controller :

@RequestMapping(value = "/app", method =  { RequestMethod.GET, RequestMethod.POST })
public String view(ModelMap model, @RequestParam(value = "foo", required = false) Integer foo) {
MapDTO mapDto = new MapDTO();
Map<String, List<Foo>> mapFoo ... // populate map etc.
model.add("mapDto", mapDto.setMapFoo(mapFoo))
return foo == null ? VIEW : VIEW + " :: fooFragment"
}

以及用于测试目的的模板:

.. page ..
<div th:fragment="fooFragment" id="fooFragment">
..
<th:block th:each="fooMap : ${mapDto.mapFoo}">
<th:block th:each="item,row : ${fooMap.value.fooList}">
<p th:text="${item.val}"</p> <!-- working OK -->
<p th:text=" ${fooMap.value.fooList[__${row.index}__].idrValueName} "></p> <!-- working OK -->
<input th:field="*{mapDto.mapFoo[__${fooMap.key}__].fooList[__${row.index}__].val} "></p><!-- And this is working -->
<p th:text="${mapDto.mapFoo[__${fooMap.key}__].fooList[__${row.index}__].val} "></p><!-- FAILING ON THIS -->
</th:block>
</th:block>
..
</div>
.. rest of the page ..

假设我有一张带有“A”和“Ā”键的 map 。

  • 我遇到以下异常:
  • org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常是 org.thymeleaf.exceptions.TemplateProcessingException:评估 SpringEL 表达式的异常:“mapDto.mapFoo[Ā].fooList[0].val”
    ..
    造成原因:
    java.lang.IllegalStateException:无法处理(257)'Ā'

  • 有趣的是 - 我在不同页面上有几乎完全相同的设置(mapDto 结构和模板略有不同,但原理相同,页面标题相同),而且我没有遇到相同的问题。
  • 没有包含非英语字符的键的 map 的行为与预测一致。
  • 有什么想法问题出在哪里吗?

    已解决:使用双括号语法解决了所描述的问题
    ${{...}}
    它有一些限制。但我能够解决它们,它解决了我的主要问题。

    最佳答案

    mapDto.mapFoo[Ā].fooList[0].val

    该表达式包含重音字符Ā。查看Tokenizer的源码,重音字符被明确指示为标记化的无效候选者。

    Spring EL InternalSpelExpressionParser负责解析表达式的代码与此 Tokenizer 紧密耦合,因此我认为没有一种现成的方法可以允许对重音字符进行标记。我很确定这是不允许的(例如,它可能会破坏框架的其他部分),因此我建议您遵循框架的要求并删除表达式中的重音字符。

    关于java - Thymeleaf Map<String, Object> 迭代和映射键中的非英语字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34930963/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com