以JSP日期格式处理不可解析的字符串

时间:2009-08-28 17:57:35

标签: java html jsp jstl

我正在编写一个JSP,有时需要格式化来自请求的Java Date。我是这样做的:

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

它在Java日期上运行得非常好。

但是,有时候具有完全相同名称(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 个答案:

答案 0 :(得分:3)

制作一个标签:-)这样你就可以在你的标签文件中定义c:choose,并在你的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}"/>

正如你所看到的,它真的不需要那么多代码,如果你最终在其他地方重复这个逻辑,你会发现自定义标签非常方便。

答案 1 :(得分:3)

这很简单:

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

不像我希望的那样优雅,但它有效。