0

スクリプトレットで JSF データ テーブルの行インデックスを取得しようとしています。

JSF コンポーネントを使用すると、魅力的に機能します。

<h:outputText value="#{Operations.postsDataTable.rowIndex}" /> 

しかし、次のようなスクリプトレットを使用すると:

<% out.println(Operations.getPostsDataTable().getRowIndex()); %>

-1次に、行ごとに印刷されます。私は何を間違っていますか?

4

1 に答える 1

2

私は何が間違っているのですか?

要するに、すべきではないのにスクリプトレットを使用することです。10年前のJSP2.0以降、これらの使用は推奨されていません。

具体的な問題は、JSTLや他のすべてのタグハンドラーとまったく同じように、ビューのレンダリング時間ではなく、ビューのビルド時間中に実行されるために発生します。これは、この回答で詳細に説明されています。JSF2FaceletsのJSTL ...意味がありますか?何が起こっているのかを理解するには、「JSTL」を「スクリプトレット」に置き換えるだけです。要約:JSFコンポーネントと「同期」して実行されません。これらは、JSFコンポーネントツリーによるHTML出力の生成中ではなく、JSFコンポーネントツリーの構築中に実行されます。

ちなみに、JSPの後継のFacelets (XHTML)では、スクリプトレットを使用することはすでに不可能であるため、すでに「正しい方法」で行う必要があります。

于 2012-08-11T22:26:09.713 に答える