Java 在JSP日期格式化程序中处理不可解析的字符串

Java 在JSP日期格式化程序中处理不可解析的字符串,java,html,jsp,jstl,Java,Html,Jsp,Jstl,我正在编写一个JSP,它有时需要格式化来自请求的Java日期。我是这样做的: <fmt:formatDate value="${attribute.value}" pattern="yyyy-MM-dd HH:mm:ss"/> 简单地说, I AM NOT A DATE 在生成的HTML中?创建一个标记:-),这样您就可以在标记文件中定义c:choose,而在JSP中,只有一行与您所拥有的内容几乎相同,例如: <your:formatDate value="I AM NOT

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

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

I AM NOT A DATE
在生成的HTML中?

创建一个标记:-),这样您就可以在标记文件中定义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>

${date}
2) 将标签添加到您的页面:

<%@ taglib tagdir="/WEB-INF/tags/someNamespace" prefix="s" %>

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>

${attribute.value}

虽然没有我所希望的那么优雅,但它很管用。

我没有制作自己的标签的经验,但我认为这对我的应用程序来说可能有些过分了。至少现在,在一个JSP中只有一个地方我需要这个。当然,它在未来可能会有用途,但现在,这正在生成更多的代码,而不是更少。接下来:我不确定我将如何为此编写choose。有没有像try/catch这样的标签我可以使用?测试某物是否是日期的方法也应该足够了。
<s:yourTag date="${attribute.date}"/>
<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>