<%@ 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 函数。 Death到 scriptlet。
<c:out value="${my:prettyTime(date)}" />
关于java - 为什么此 PrettyTime 自定义标记会在 HTML 输出中的 "pretty"日期之前生成 11 行空白文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4018741/