【问题标题】:Handling unparseable strings in a JSP date formatter在 JSP 日期格式化程序中处理不可解析的字符串
【发布时间】:2010-11-23 19:50:14
【问题描述】:

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

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

它在 Java Dates 上运行良好。

但是,有时具有完全相同名称 (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 中?

【问题讨论】:

    标签: java html jsp jstl


    【解决方案1】:

    制作一个标签 :-) 这样你就可以在你的标签文件中定义 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 个 JSP 中只有 1 个地方需要这个。当然,将来它可能会有用处,但现在,这正在编写更多代码,而不是更少。
    • 跟进:我实际上并不确定如何为此编写选择。我可以使用类似 try/catch 的标签吗?测试某事物是否为 Date 的方法也应该足够了。
    【解决方案2】:

    这很简单:

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

    没有我希望的那么优雅,但它确实有效。

    【讨论】:

      猜你喜欢
      • 2019-02-08
      • 2019-06-23
      • 2017-06-16
      • 2020-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多