2012-02-26 91 views
3

JSP Scriptlet中的以下代码完全符合我的需要(使用Spring/Hibernet)。如何在forEach循环内连接JSTL中的字符串?

<% 

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(); 

%> 

它为数据库中的每部电影(一部电影有多种语言)显示电影langiageId。它连接由每个电影以逗号分隔的languageId。例如,如果第一部电影有3个languageId,则它显示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应该重新初始化为一个空字符串,如Scriptlet中显示的字符串。

+0

我想在一个自定义的标签或包装的功能这件事;这是很多噪音,只是为了创建一个逗号分隔列表。 – 2012-02-26 14:43:46

回答

3

这应该这样做:

<c:set value="${id}${status.first ? '' : ','}${lan.languageId}" scope="request" var="id" /> 
+0

它为我工作。我也可以使用*自定义标签*来实现相同。谢谢。 – Bhavesh 2012-02-27 20:22:21

+0

不客气。 – BalusC 2012-02-27 20:23:50