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 出力の "pretty" 日付の前に11 行の空白テキストを生成する理由がわかりません。

4

2 に答える 2

4

Thorbjoern はすでに原因を回答しているため、この煩わしさを取り除く可能性が高いため、解決策のみを回答します。

スクリプトレットとタグ ライブラリの処理後に残った空白を削除するようにサーブレット コンテナを設定できます。たとえば、Apache Tomcat では、Tomcat 7 では次のように表示される JSP サーブレット/conf/web.xmlの定義の見出しを開くことで実行できます。<servlet>

<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 サーブレットの定義に次のように<init-param>ofを追加します。trimSpaces=true<servlet>

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

Tomcat を再起動すると、この空白がなくなるはずです。少なくとも、ほとんどはなくなるでしょう。自分で導入した空白が JSP からも物理的に削除されるように注意する必要があります。

JSP エンジンの HOW-TO も参照してください。他のほとんどすべてのサーブレットコンテナは、同様の構成を持っています。キーワード「トリムスペース」を使用してドキュメントを参照してください。


一般的なアプローチとしては、それを Java クラスに変換し、代わりに EL 関数を作成することをお勧めします。スクリプトレット

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

<%...%> を削除すると、生成された出力で忠実に再現される改行がまだ残っているためです。

于 2010-10-25T20:53:07.197 に答える