web-dev-qa-db-ja.com

JSF 1.2とJSF 2.xの間のJSTL xmlns名前空間の違いは?

JSTLインポートをコピーしたJSF 1.2ベースのWebアプリケーションがあります。

xmlns:c="http://Java.Sun.com/jstl/core"

このインポートは、インターネット上の多くの場所でも見つけることができます。上記が私の以前のWebプロジェクトで機能したかどうか覚えていませんが、いずれにしても、現在のJSF 2.0ベースのWebアプリケーションでは機能しません機能しません 。コンテナから次のような警告が表示されました。

警告:このページでは、XML名前空間 http://Java.Sun.com/jstl/core がプレフィックスcで宣言されていますが、その名前空間にタグライブラリが存在しません。

次に、インポートを

xmlns:c="http://Java.Sun.com/jsp/jstl/core"

... JSF/RichFacesベースのWebアプリケーションで<c:forEach>を使用してすべての頭痛の種を取り除きました。

ここでの秘訣は何ですか? JSTLインポートURLにJSF 1.2から2.xへの変更はありますか?または前の行は一般的に間違っていますか(JSFで)? 2つの違いは何ですか?

20
Kawu

JSTL wikiページを確認してください: https://stackoverflow.com/tags/jstl/infojstlにカーソルを合わせると、このようなページが表示されます 黒いボックスがポップアップするまで質問の下にタグを付け、次にinfoリンクをクリックします。

Facelets 1.xと2.xがJSTLタグライブラリに異なる名前空間を使用することは事実です。これは、Facelets 1.xでは名前空間 bug でしたが、Facelets 2.xでは修正されました。

  • 実際のJSTL 1.0 taglibはURI http://Java.Sun.com/jstl/coreを使用します。
  • 実際のJSTL 1.1/1.2 taglibはURI http://Java.Sun.com/jsp/jstl/coreを使用します。
  • Facelets 1.xはURI http://Java.Sun.com/jstl/coreを使用します。
  • Facelets 2.xはURI http://Java.Sun.com/jsp/jstl/coreを使用します。
  • Facelets 2.2+はURI http://xmlns.jcp.org/jsp/jstl/coreを使用します。

すべてのFacelets 2.xタグは Faceletsタグライブラリのドキュメント にあります。 Faceletsは、完全なタグが 実際のJSTL taglib として設定された状態で出荷されません。いくつかの<c:xxx><fn:xxx>のフルセットのみがFaceletsにコピーされます。 <fmt:xxx><sql:xxx><xml:xxx>タグはFaceletsでは引き継がれません。

42
BalusC

JSTLはELの一部になりました。
それはJSF実装に依存しませんが、サーブレットコンテナーが準拠しているサーブレットのバージョンに依存します。
したがって、これらは異なるサーバーまたは同じサーバーの異なるバージョンで実行されている必要があります。


短い答えは、jboss 7である2.4以上からです。
JSTL doc here を通過すると、どのような方法でも見つけることができます。
その他の賢明な方法はこちら link です。
そしてもう1つ ここ BalusCから。

3
Shahzeb