我想知道是否有办法在JSP / JSTL中为特定类注册默认渲染器。
我在我的页面上显示一个表格报告,其中每个表格行都是通用的List<Object>
。由于我事先不知道特定项目的类型,因此我使用<c:out ...>
输出值。据我所知,这是toString()
。
现在我想根据项目的类别更改格式,例如更改十进制数的格式。当然我不能使用<fmt:formatXXX ...>
,因为我事先并不知道这种类型。
我相信这在JSF中是可行的。但是有没有办法在JSP中实现这个目标?
我最好的镜头是将List<Object>
转换为List<String>
并在我的控制器类中应用格式,但这比注册叛徒IMHO稍微不那么优雅。
答案 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>