jstl split function

2020-02-16 01:17发布

问题:

I wanted to split a given string using jstl 1.2 eg:

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>

But the output is not want I wanted which is
http
website1.com
http
website2.com

I tried another way, and its dint work either.
<c:set var="_split" value= " : "/>
<c:set var="offUrls" value="${fn:split(url,_split)}" />

回答1:

fn:split will split your string on any of the delimiter characters, so in your case both space and :. The solution is to do a fn:replace first:

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

Make sure to replace the separator with a character that is not present in your string, or else you will run into the same problem. Now you can use fn:split(urls, '|'), but it would be easier to use <c:forTokens/>:

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

A better solution would be to simply do the work at the back end of your application and pass a list of strings to the front end.