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
お役に立てれば :)