2012-04-24 1 views
17

Как разделить строки, разделенные «/» на странице jsp, используя JSTL?Как правильно разделить строки в JSTL?

У меня есть строка в следующем формате: **

"23/11/2010"

* . Иногда, строка может выглядеть так: *

"1/1/2010"

* . мне нужно сделать что-то для того, чтобы разделить строку в трех различных подстрок: *

"23", "11", "2010".

** Это потому, что мне нужно поместить каждый из них в трех различных текстовых полей, как эти:

<input type="text" value="23">/ 
<input type="text" value="11">/ 
<input type="text" value="2010"> 

Я не мог найти рабочий пример еще.

Заранее благодарен!

ответ

42

Для этого вы можете использовать функцию fn:split().

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> 
... 
<c:set var="dateParts" value="${fn:split(dateString, '/')}" /> 
... 
<input type="text" name="day" value="${dateParts[0]}" /> 
<input type="text" name="month" value="${dateParts[1]}" /> 
<input type="text" name="year" value="${dateParts[2]}" /> 

Убедитесь, что формат даты проверяется заранее :) Было бы проще, если бы это было java.util.Date, не java.lang.String. Затем вы можете использовать <fmt:formatDate>, чтобы перенести его в надежный и фиксированный формат строки. В противном случае вам нужно будет добавить проверки длины массива на fn:length() и предотвратить потенциальные удары XSS-атаки на fn:escapeXml().

+0

Это было очень обучающее! спасибо BalusC ... – Lucas

+0

Добро пожаловать. – BalusC

+1

Можно ли использовать foreach на этом? – Wax

7

Стоит отметить, что для тех, кто находит этот вопрос в своих поисках (как и я), стоит отметить, что JSTL имеет полезный тег <c:forTokens>. Это разделит входную строку на предоставленный разделитель и затем перебирает результирующий набор токенов.

Как показано здесь, следующий код:

<c:forTokens items="A,B,C,D" delims="," var="mySplit"> 
    <c:out value="${mySplit}"/></br> 
</c:forTokens> 

привело бы:

A 
B 
C 
D 

Документация: JSTL core Tag forTokens