如何在JSP / JSTL中为类注册渲染器?

时间:2012-02-09 13:27:53

标签: java jsp jstl

我想知道是否有办法在JSP / JSTL中为特定类注册默认渲染器。

我在我的页面上显示一个表格报告,其中每个表格行都是通用的List<Object>。由于我事先不知道特定项目的类型,因此我使用<c:out ...>输出值。据我所知,这是toString()

现在我想根据项目的类别更改格式,例如更改十进制数的格式。当然我不能使用<fmt:formatXXX ...>,因为我事先并不知道这种类型。

我相信这在JSF中是可行的。但是有没有办法在JSP中实现这个目标?

我最好的镜头是将List<Object>转换为List<String>并在我的控制器类中应用格式,但这比注册叛徒IMHO稍微不那么优雅。

1 个答案:

答案 0 :(得分:1)

JSP没有“渲染器”的概念,它不是基于组件的MVC框架。但是你可以为此创建一个custom tag

或者,您可以使用普通的JSTL执行类似的操作,只需检查Object#getClass()就可以计算EL对象的类:

<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>