Как зарегистрировать рендерер для класса в JSP / JSTL? - PullRequest
1 голос
/ 09 февраля 2012

Мне было интересно, есть ли способ зарегистрировать средство визуализации по умолчанию для определенного класса в JSP / JSTL.

Я на своей странице показываю табличный отчет, где каждая строка таблицы получается как общая List<Object>.Так как я заранее не знаю тип конкретного элемента, я вывожу значение с помощью <c:out ...>.Насколько я знаю, это toString().

Теперь я хочу изменить формат в зависимости от класса элемента, например, изменить формат десятичных чисел.Конечно, я не могу использовать <fmt:formatXXX ...>, потому что я не знаю тип заранее.

Я считаю, что это возможно в JSF.Но есть ли способ, как добиться этого в JSP?

Мой лучший снимок - преобразование List<Object> в List<String> и применение форматирования в моем классе контроллера, но это немного менее элегантно, чем в регистре.ИМХО ретрандер.

1 Ответ

1 голос
/ 09 февраля 2012

JSP не имеет понятия «визуализаторы», это не основанная на компонентах инфраструктура MVC.Но вы можете создать для этого пользовательский тег .

В качестве альтернативы вы можете сделать что-то подобное с простым JSTL, можно определить класс объекта EL, просто проверив Object#getClass():

<c:choose>
    <c:when test="${item['class'].name == 'java.lang.Integer'}">
        <fmt:formatNumber value="${item}" type="number" />
    </c:when>
    <c:when test="${item['class'].name == 'java.math.BigDecimal'}">
        <fmt:formatNumber value="${item}" type="currency" />
    </c:when>
    <c:when test="${item['class'].name == 'java.util.Date'}">
        <fmt:formatDate value="${item}" type="date" />
    </c:when>
    <c:otherwise>
        <c:out value="${item}" />
    </c:otherwise>
</c:choose>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...