Подтвердить что ты не робот

Как правильно разделить строки в 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">

Я еще не нашел рабочего примера.

Спасибо заранее!

4b9b3361

Ответ 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.