java 使用其索引时Thymeleaf循环错误

dly7yett  于 2023-05-05  发布在  Java
关注(0)|答案(2)|浏览(110)

我尝试在Thymeleaf中迭代一个字符串,一个字母一个字母:

<div th:each="i: ${#numbers.sequence(0, #strings.length(name))}">
    <p th:text="${name.charAt(i)}"></p>
</div>

这给了我一个错误:
原因:org.attoparser.ParseException:计算SpringEL表达式时出现异常:“name.charAt(i)”(模板:“name-list”- line 8,col 16)at org.attoparser.MarkupParser.parseDocument(MarkupParser. java:393)at org.attoparser.MarkupParser.parse(MarkupParser. java:257)at org.thymeleaf. templaparser.markup.AbstractMarkupTemplateParser.parse(AbstractMarkupTemplateParser. java:230)...48更多
如果我做了

<div th:each="i: ${#numbers.sequence(0, #strings.length(name))}">
    <p th:text="${name.charAt(2)}"></p>
</div>

Thymeleaf没有抱怨,给我我想要的。谢谢大家。

iklwldmw

iklwldmw1#

你的索引越界了。从字符串的长度中减去1作为序列的端点(包括)。

<div th:each="i: ${#numbers.sequence(0, #strings.length(name) - 1)}">

您可以直接使用[i]来通过索引访问字符,而不是charAt

<p th:text="${name[i]}"/>

为了避免使用索引,可以循环字符串的字符(通过调用toCharArray()获得)。

<div th:each="c: ${name.toCharArray()}">
    <p th:text="${c}"/>
</div>
a0x5cqrl

a0x5cqrl2#

你也可以使用index属性,如下所示

<div th:each="i,itr: ${#numbers.sequence(0, #strings.length(name))}">
    <p th:text="${name.charAt(itr.index)}"></p>
</div>

相关问题