Как правильно разделить строки в JSTL?
Как я могу разделить строки, разделенные "/" внутри страницы jsp, используя 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">
Я еще не нашел рабочего примера.
Спасибо заранее!
Ответы
Ответ 1
Для этого вы можете использовать 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()
.
Ответ 2
Стоит отметить, что кто-то еще находит этот вопрос в своем поиске (как и я), что 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 forTokens
Ответ 3
Используйте библиотеку JNL fn. У них есть split.