7

Glassfishで実行されているJavaプロジェクトがあり、見苦しいHTMLをレンダリングします。さまざまな内部および外部のJSPライブラリを使用することによる副作用。ある種のレンダリング後フィルターを設定して、HTMLTidyを介して最終的なHTMLをフィードし、デバッグを支援するためにソースが適切で適切になるようにします。これは可能ですか?

サーバーがJSPをHTMLにレンダリングした後に何らかのアクションを実行するための組み込みのメカニズムはありますか?そのアクションは、生成されたHTMLを文字列として取得し、それを操作できますか?余分なコーディングなしでこれを行うための簡単な組み込みオプションはありますか?

4

3 に答える 3

5

JTidyFilter

于 2010-02-02T18:45:15.100 に答える
3

この動作は、JSP2.1プロパティtrimDirectiveWhitespacesをに設定することである程度排除することもできますtrue。これは、次の方法で個々のJSPファイルで有効にできます。

<%@page trimDirectiveWhitespaces="true" %>

または、すべてのJSPファイルで次のエントリを使用しますweb.xml(サーブレット2.5として宣言する必要があります)。

<jsp-config>
    <jsp-property-group>
        <url-pattern>*.jsp</url-pattern>
        <trim-directive-whitespaces>true</trim-directive-whitespaces>
    </jsp-property-group>
</jsp-config>

JSP2.1より前のコンテナまたはTomcatなどの内部的な理由でこれを実際にサポートしていないJSP2.1コンテナでは、JspServlet初期化パラメータについてドキュメントを参照する必要があります。たとえばTomcatの場合、Tomcatの:でtrimSpacesinit-paramをJspServletに設定することで構成することもできます。true/conf/web.xml

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

どちらのアプローチも実際にはHTMLコードを「再フォーマット」しないことに注意してください。実際には、taglibsとscriptletによって残された空白のみをトリミングします。このSunの記事も参照してください。たとえば、次のようになります。

<ul>
    <c:forEach items="${list}" var="item">
        <li>${item}</li>
    </c:forEach>
</ul>

..基本的には

<ul>
        <li>item1</li>
        <li>item2</li>
        <li>item3</li>
</ul>

したがって、二重インデントを使用します。これを実際に回避するには、JSPタグが半分インデントされるようにコードを再フォーマットします。

<ul>
  <c:forEach items="${list}" var="item">
    <li>${item}</li>
  </c:forEach>
</ul>

しかし、ここではJTidyFilterの方が簡単だと思います:)

于 2010-02-02T20:15:05.803 に答える
0

ブラウザに返される前にhtml出力を取得するように制御フローを変更できる場合は、jtidyが役立つ可能性があります。

ただし、これは最悪の場合の修正と見なします。長期的には、HTML生成コードを分離し、それをリファクタリングすることがさらに役立つはずです。大規模で複雑なプロジェクトでも、これを小さな部分で実行できるはずであり、徐々に改善されます。そうしないと、問題が大きくなり、整頓が役に立たなくなった場合、最初の場所に戻ることになります(さらに扱いにくいコードを処理する必要があります)。

于 2010-02-02T18:46:30.010 に答える