如何在JSTL的forEach循环中连接字符串?

3
在JSP Scriptlet中,以下代码可以完全满足我的需求(使用Spring/Hibernate)。
<%

org.hibernate.Session s=NewHibernateUtil.getSessionFactory().getCurrentSession();
s.beginTransaction();

java.util.List<model.Movies> m=s.createQuery("from model.Movies order by moviesId").list();

for(model.Movies row:m)
{
    String id="";
    for(model.Language lan:row.getLanguages())
    {
        id+=lan.getLanguageId()+",";
    }
    out.println(id);
}

s.flush();
s.getTransaction().commit();

%>

它显示数据库中每个电影的languageId(一个电影有多种语言)。对于每个电影,它将languageId连接起来,用逗号分隔。例如,如果第一部电影有3种语言,它会显示1、2、3。如果第二部电影(数据库中的行)有4种语言,则在下一行中显示4、5、6、7等。如何使用JSTL实现相同的功能?以下是我没有想出来的不完整版本的JSTL forEach循环。

<c:forEach items="${list}" var="row" varStatus="status">
    <c:forEach items="${row.languages}" var="lan" varStatus="status">
        <c:set value="${lan.languageId}" scope="request" var="id">

        </c:set>

    </c:forEach>
</c:forEach>

如何将每组电影的languageId用逗号分隔开?当内部的forEach完成后,id应该被重新初始化为空字符串,就像脚本中所示的那样。


我会将这个内容封装在自定义标签或函数中;仅为创建逗号分隔列表而产生如此多的噪音。 - Dave Newton
1个回答

3
这应该可以完成:
<c:set value="${id}${status.first ? '' : ','}${lan.languageId}" scope="request" var="id" />

它对我有用。我还曾经使用过自定义标签来达到同样的效果。谢谢。 - Bhavesh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接