Обработка неразборчивых строк в формататоре даты JSP - PullRequest
3 голосов
/ 28 августа 2009

Я пишу JSP, который иногда должен отформатировать дату Java, которая выходит из запроса. Я делаю это так:

<fmt:formatDate value="${attribute.value}" pattern="yyyy-MM-dd HH:mm:ss"/>

и прекрасно работает на Java Dates.

Однако бывают случаи, когда поле атрибута запроса с точно таким же именем (attribute.value) на самом деле не является датой и не должно быть отформатировано как таковое. Я хотел бы просто пропустить эту строку через тег fmt:format «как есть», а не выдавать исключение в неразборчивую дату.

Я мог бы сделать нечто подобное, используя c:choose, но я бы предпочел максимально отделить представление JSP от базовых данных, так что это не идеальный выбор для меня. Итак, есть ли способ сделать что-то вроде

<fmt:formatDate value="I AM NOT A DATE" pattern="yyyy-MM-dd HH:mm:ss"/>

оцените, просто,

I AM NOT A DATE

в сгенерированном HTML?

Ответы [ 2 ]

3 голосов
/ 28 августа 2009

Это было достаточно просто сделать:

<c:catch var="ex">
    <fmt:formatDate value="${attribute.value}" pattern="yyyy-MM-dd HH:mm:ss"/>
</c:catch>
<c:if test="${not empty ex}">
    ${attribute.value}
</c:if>

Не так элегантно, как я надеялся, но это работает.

3 голосов
/ 28 августа 2009

Создание тега :-) Таким образом, вы можете определить c: select в вашем файле тегов, и в ваших JSP просто есть одна чистая строка, которая почти идентична той, что у вас есть, например ::

<your:formatDate value="I AM NOT A DATE" pattern="yyyy-MM-dd HH:mm:ss"/>

(Или, если вы всегда используете один и тот же шаблон, вы можете даже жестко закодировать его в свой тег и сделать вышеупомянутое еще более чистым.)

Прокомментируйте, если у вас есть вопросы по поводу пользовательских тегов.

РЕДАКТИРОВАТЬ: Вот как вы могли бы сделать тег для этого, если вы когда-нибудь захотите попробовать:

1) Создайте «WEB-INF / tags / someNamespace / yourTag.tag» со следующим кодом:

<%@ tag isELIgnored="false" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ attribute name="date" type="java.util.Date" required="true" %>
<c:choose>
<c:when test="${date instanceOf java.util.Date}">
<fmt:formatDate value="${date}" pattern="yyyy-MM-dd HH:mm:ss"/>
</c:when>
<c:otherwise>${date}</c:otherwise>
</c:choose>

2) Добавьте тег на страницу:

<%@ taglib tagdir="/WEB-INF/tags/someNamespace" prefix="s" %>

3) Используйте это:

<s:yourTag date="${attribute.date}"/>

Как вы можете видеть, на самом деле это не так уж много кода, и если вы все же будете повторять эту логику в другом месте, вы найдете очень удобные пользовательские теги.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...