jstl分割功能

时间:2012-09-26 14:44:25

标签: function split jstl

我想使用jstl 1.2拆分给定的字符串 例如:

Bean thesis.url contains "http:website1.com : http:website2.com"
which needs to be splited into
http:website1.com
http:website2.com

<c:set var="url">
  <c:out value="${thesis.url}" />
</c:set>  

<c:set var="offUrls" value="${fn:split(url,' : ')}" />
<c:forEach items="${offUrls}" var="link">
    <a href=" <c:out value='${link}' />" target="_blank">
        <c:out value="${link}" />
    </a>
</c:forEach>

但是输出并不是我想要的  HTTP
 website1.com
 HTTP
 website2.com

我尝试了另一种方式,它的工作也是如此。  
 <c:set var="_split" value= " : "/>
<c:set var="offUrls" value="${fn:split(url,_split)}" />

1 个答案:

答案 0 :(得分:4)

fn:split会将您的字符串拆分为任何分隔符字符,因此在您的情况下,空格和:。解决方案是首先执行fn:replace

<c:set var="urls" value="http://website1.com : http://website2.com"/>
<c:set var="urls" value="${fn:replace(thesis.url, ' : ', '|')}"/>

确保使用字符串中不存在的字符替换分隔符,否则您将遇到同样的问题。现在您可以使用fn:split(urls, '|'),但使用<c:forTokens/>会更容易:

<c:forTokens items="${urls}" delims="|" var="url">
  <a href="${url}">${url}</a>
</c:forTokens>

更好的解决方案是简单地在应用程序的后端完成工作,并将字符串列表传递给前端。