繁体   English   中英

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

[英]How to register a renderer for a class in JSP/JSTL?

我想知道是否有一种方法可以为JSP / JSTL中的特定类注册默认渲染器。

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

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

我相信这在JSF中是可能的。 但是有没有办法在JSP中实现呢?

我最好的选择是将List<Object>转换为List<String>并在我的控制器类中应用格式,但这比注册renederer IMHO稍微好一点。

JSP没有“渲染器”的概念,它不是基于组件的MVC框架。 但是您可以为此创建一个自定义标签

另外,您可以使用普通的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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM