JSP中如何为JSON数组输出值添加间隔空格?
解决JSP中JSONArray输出时逗号加空格的问题
看来你碰到了EL表达式调用带参数方法的兼容性坑,我给你梳理几个靠谱的解决方案:
为啥你的写法没生效?
旧版本的EL(低于2.2)只支持调用无参的JavaBean getter方法,不允许直接调用带参数的方法。所以你写的${myData.personsList.join(', ')}会被EL误认为是要访问join(', ')这个“属性”,而不是调用方法,结果就直接把.join(', ')原样输出了。
分情况解决:
1. 容器支持EL 2.2+(比如Tomcat 7+、Servlet 3.0+)
先确认你的web.xml根元素是<web-app version="3.0"及以上版本,这样EL 2.2的方法调用特性才会被启用。然后正确调用JSONArray的join方法:
<div class="someClass">${myData.personsList.join(', ')}</div>
如果还是不行,检查你用的JSON库(比如org.json)的JSONArray.join()方法是否为public,参数是否是String类型——有些实现可能存在参数不匹配的情况。
2. 容器不支持EL 2.2(旧版Servlet容器)
这种情况用JSTL的<c:forEach>手动拼接最稳妥:
首先确保页面引入JSTL核心标签库:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
然后替换原输出代码:
<div class="someClass"> <c:forEach var="person" items="${myData.personsList}" varStatus="status"> ${person} <c:if test="${!status.last}">, </c:if> </c:forEach> </div>
这个逻辑会遍历personsList的每个元素,只有非最后一个元素时才输出, ,刚好实现你要的格式。
3. 后端预处理(最推荐)
不想在前端纠结EL兼容性的话,直接在后端Java代码里提前处理好格式化后的字符串:
比如给你的myData对象加一个方法:
public String getPersonsListFormatted() { if (personsList == null || personsList.isEmpty()) { return ""; } // 如果用org.json.JSONArray,直接调join方法即可 return personsList.join(", "); }
然后在JSP里直接输出这个预处理好的属性:
<div class="someClass">${myData.personsListFormatted}</div>
这种方式兼容性拉满,不管EL版本如何都能正常工作。
内容的提问来源于stack exchange,提问作者Vicky
相关产品推荐
相关产品推荐

