ページ内の他の場所で使用されているオブジェクトを参照するページコンポーネントが多数あるサイトを作成しています。これらのコンポーネントの中には他のページでも使用されているものがあります。したがって、使用する私の望みはカット&ペーストではなくむしろ含まれています。jsp use含まれるページコンポーネントの範囲。
問題は、ページの複数のコンポーネントに同じ "jsp:useBean"ステートメントがあると、コンパイラがエラー "重複するローカル変数"を返すことです。
JSPページの複数のコンポーネントで同じオブジェクトを使用するには、ファイル内にすべてのものを入れないでください。
例:メイン(親)ページに:
<jsp:useBean id="fred" class="..." scope="request" />
<jsp:directive.include file="myWidget.jsp" />
含まれるページ、myWidget.jspは、また、 "フレッド" オブジェクトを使用するために必要があります。
<jsp:useBean id="fred" class="..." scope="request" />
しかし、これはコンパイルが "重複するローカル変数 'fred'"で失敗する原因となります。
これは基本的に、ページをコンポーネントに分解するという考え方に反するものです。 JSPファイルの長さが数百行になることは望ましくありませんが、それはお互いにわずかです。それは、サイトのすべてのページで一致していることが絶対不可欠だ、私はスクリプトレットで問題を回避働いてきた一つの構成要素については、
:
<%
{ // for scope
Object _o1 = request.getAttribute("fred");
if (_o1 !=null && _o1 instanceof MyClass)
{
// use a deliberately obscure variable name to avoid conflict
MyClass _myLocalFred1 = (MyClass) _o1;
}
} // for scope
%>
これは動作しますが、それは醜いです。いくつかの本は "スクリプトレットを使用しないでください"と言っていますが、スクリプトスコープは可変スコープを制御できる唯一の方法であると思われ、ページ内の他の場所で使用されていることを心配することなく名前を使用できます。
インクルードファイルでjsp:useBeanを使用するにはどうすればよいですか?
JSPは、「ウィジェット」スタイルのプログラミング用に設計されたことはありません。 Sunはこれを知っており、JSFに移行しました。純粋なJSPの代わりにJSFを使用することを検討しましたか?他のどのWebフレームワークもあなたが望むことをするでしょう。 – kazanaki