java - 为什么此 PrettyTime 自定义标记会在 HTML 输出中的 "pretty"日期之前生成 11 行空白文本?

标签 java jsp jstl date-format custom-tag

<%@ 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 行空白文本

最佳答案

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

您可以将 servlet 容器配置为在处理 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>

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

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

重新启动 Tomcat,这个空格就会消失。至少,大部分都会消失。您只需注意您自己引入的空白也将从 JSP 中物理删除。

另请参阅JSP engine HOW-TO 。几乎所有其他 servlet 容器都有类似的配置。使用关键字“trim space”查阅他们的文档。

<小时/>

至于一般方法,我建议将其转换为 Java 类,并为其创建 EL 函数。 Deathscriptlet

<c:out value="${my:prettyTime(date)}" />

关于java - 为什么此 PrettyTime 自定义标记会在 HTML 输出中的 "pretty"日期之前生成 11 行空白文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4018741/

相关文章:

java - 多个 fragment 需要位置更新

java - 无法运行 'Hello World"Spring MVC 代码

java - 如何在JSP中显示对象的数据

jsp - 如何在 JSTL 中循环指定次数?

java - 使用 JSTL 访问 Struts2 操作

jsf - 你如何使用JSTL?

java - 以下 Java 代码在自主计算领域有何用处?

Java - 在 for 循环中声明变量

java - Java执行-f选项

java - 如何使用javascript在输入类型文件中设置默认值?