采取以下JSP片段:
<c:forEach items="${items}" varStatus="status">
${'A' + status.index}
</c:forEach>
意图应该明确,我正在尝试为循环中的每次迭代生成基于“ A”的字符索引。在Java中,这很好(例如
'A' + 1 == 'B'
),但是Tomcat 6 barfs上带有java.lang.NumberFormatException: For input string: "A"
的JSP EL。似乎它不能将字符作为序数值处理。当前的解决方案将其分解为一个自定义taglib,但这对于如此琐碎的事情来说是荒谬的。
谁能说服EL进行此计算?
最佳答案
首先创建字母:
<c:set var="alphabet" value="ABCDEFGHIJKLMNOPQRSTUVWXYZ"/>
然后,您可以使用fn:substring访问字母。
${fn:substring(alphabet, status.index, status.index + 1)}
您的示例将变为:
<c:forEach items="${items}" varStatus="status">
<c:set var="indexOfLetter" value="${fn:indexOf('A', alphabet) + status.index}"/>
${fn:substring(alphabet, indexOfLetter, indexOfLetter + status.index + 1}
</c:forEach>
您可能需要进行一些边缘情况检查,但这应该可以工作。
关于java - 在JSP EL中生成序数字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2312656/