0
<%@ tag language="java" pageEncoding="utf-8" isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ tag import="com.ocpsoft.pretty.time.PrettyTime, java.util.Date"%>
<%@ attribute name="dateParam" required="true" type="java.util.Date" %>

<%
 PrettyTime p = new PrettyTime();
 String prettyDate = p.format(dateParam);
 jspContext.setAttribute("prettyDate", prettyDate.trim());
%>
<c:out value="${prettyDate}"/>

我不知道我在这个标签中是否做错了什么。

PrettyTime 库应该只打印数据的文本版本,例如:

10 months ago

但我不知道为什么这个自定义标签会在 HTML 输出中的“漂亮”日期之前生成11 行空白文本?

4

2 回答 2

4

由于 Thorbjoern 已经回答了原因,我只会回答解决方案,因为您可能会摆脱这种烦恼。

您可以配置您的 servletcontainer 以在处理 scriptlet 和 taglib 后修剪剩余的空白。在例如 Apache Tomcat 中,您可以通过打开/conf/web.xml, 标题到<servlet>JSP servlet 的定义来做到这一点,在 Tomcat 7 上如下所示

<servlet>
    <servlet-name>jsp</servlet-name>
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
    <init-param>
        <param-name>fork</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>xpoweredBy</param-name>
        <param-value>false</param-value>
    </init-param>
    <load-on-startup>3</load-on-startup>
</servlet>

在 JSP servlet 的定义中<init-param>添加如下trimSpaces=true<servlet>

    <init-param>
        <param-name>trimSpaces</param-name>
        <param-value>true</param-value>
    </init-param>

重新启动 Tomcat,这个空白应该消失了。至少,大部分都会消失。您只需要注意您自己介绍的空格也JSP 中物理删除。

另请参阅JSP 引擎 HOW-TO。几乎所有其他 servlet 容器都有类似的配置。使用关键字“修剪空格”查阅他们的文档。


至于一般方法,我建议将其转换为 Java 类并使用它创建一个 EL 函数。小脚本之死

<c:out value="${my:prettyTime(date)}" />
于 2010-10-25T21:11:51.603 回答
1

因为当您删除 <%...%> 时,仍然会留下换行符,这些换行符会忠实地复制到生成的输出中。

于 2010-10-25T20:53:07.197 回答