15

JSPX で HTML ページを作成しようとすると、次のような問題に直面します。

  • JSPX は、必要のないタグを最小化します。たとえば、ブラウザによって解釈が異なるように<div class="foo"></div>なります<div class="foo"/>
  • JSPX タグは閉じる必要がありますが、一部の HTML タグは閉じないでおく必要があります<script...>。自己終了<script.../>タグは IE および Firefox で認識されません。
  • HTML5 doctype の指定 ( <!DOCTYPE html>)
  • インライン JavaScript

この質問は、すべて同じ問題に要約される他のいくつかへの回答です。包括的な答えが見つからなかったので、調査結果を投稿しています。

関連する質問:

4

2 に答える 2

24

JSPX は、HTML と XHTML の両方を作成するのに最適です。

要するに、この言語の XML の性質を理解することです。JSPX は XML ですが、HTML はそうではありません。その意味の 1 つは、XML が自己終了タグと空のタグを区別しないため、JSPX パーサーが空のタグを「最小化」することです。これにより、<script...>および<div></div>タグの問題が発生します。ただし、JSPX ファイルは有効な XML である必要がありますが、生成される出力はそうではないことに注意してください。したがって、(XHTML だけでなく) HTML を生成する JSPX ファイルを持つことは完全に正しいことです。実際、JSPX を使用して、CSV、CSS、JS などのテキスト出力を生成することはできますが、かなり不便です。

上記を考慮すると、最もクリーンな解決策は、htmlScript、htmlDiv などのタグを使用してカスタム taglib を作成することのようです。これらのタグは次のように使用できます。

<html:div styleClass="foo" selfClosing="false">${message}<html:div>

その HTML 出力には、コンテンツに関係なく、終了タグが含まれます。

<div style="foo"></div>
<div style="foo">Hello</div>

このような taglib を使用すると、醜い回避策を使用せずに JSPX を使用して HTML ページを作成できます。

HTML ページの構築は、JSPX の最も一般的なアプリケーションの 1 つと思われます。標準の HTML ライブラリがないというのは、少し驚くべきことです。JSFには1つありますが、クリーンなJSPを使用すると役に立ちません。このギャップを埋めるサードパーティのライブラリがあるかもしれませんが、見つけることができませんでした。

独自の taglib をコーディングしたくない場合は、CDATA を使用する別の方法があります。

<![CDATA[<script type="text/javascript" src="/js/jquery-1.4.4.min.js">]]>

また:

<![CDATA[<script type="text/javascript" src="/js/jquery-1.4.4.min.js"></script>]]>

関連する質問の他の提案は、同じ結果をもたらすコメントまたは空<jsp:text>の内部を入れることでした:<script>

<script type="text/javascript" src="/js/jquery-1.4.4.min.js"><!-- Prevent self-closing --></script>

(ラルフが指摘したように、上記はWebSphereでは機能しません)または:

<script type="text/javascript" src="/js/jquery-1.4.4.min.js"><jsp:text></jsp:text></script>

CDATA は、他のいくつかの場合にも役立ちます。それらの 1 つは、HTML5 doctype ( ) の印刷<!DOCTYPE html>です。JSPX では、有効な XML ではないため、ドキュメント内に DOCTYPE 宣言を配置できません。JSPX は jsp:output タグも定義しますが、空の場合でも SYSTEM 属性を出力します。回避策は、ページの先頭で DOCTYPE を CDATA にラップすることです。

<![CDATA[<!DOCTYPE html>]]>

CDATA を使用して、インライン JavaScript をカプセル化することもできます。これにより、「<」記号が原因で解析エラーが発生します。

<script type="text/javascript">
    var x = 7 < 5;
</script>

これはうまくいきます:

<script type="text/javascript">
    <![CDATA[
    var x = 7 < 5;
    ]]>
</script>

JSPX の CDATA はすべてをそのまま出力しますが、それでも EL 式を評価することに注意してください。したがって、次のようになります。

<![CDATA[
<jsp:expression>"asd " + "def"</jsp:expression>
${1 + 2}
]]>

生成:

<jsp:expression>"asd " + "def"</jsp:expression>
3

お役に立てれば :)

于 2011-01-09T14:32:38.817 に答える
0

推奨される方法は次のとおりです。

<script type="text/javascript">

//<![CDATA[

    //your javascript goes here
    function myFuncy(){
        if( a > b || a >= b && b && c){
            X;
        }
    }

//]]>

</script>

于 2014-03-26T15:07:52.020 に答える