2

JSTL 式とカスタム taglibs を多用するアプリがあります。これは、pageContext 属性をほぼどこにでも設定できることを意味します。それらがどこで発生したかを特定するにはどうすればよいですか? 次のようなものを検討してください。

<c:out value="${ myObject['SOME_KEY'] }" />

myObject がどこから来たのかを知る必要があります。どのようにして pageContext に入ったのでしょうか? 私は IDEA を使用しているので、IDE 内でそれを判断するためのショートカットがあれば、それが最も役に立ちます。

編集:

スコープについて知りたいわけではありませんが、属性が実際に設定された物理ファイルはどれですか。IDEA の右クリック コンテキスト メニューにある使用箇所の検索... 機能とほとんど同じです。taglibs とテンプレートを使用している可能性のある JSP の奥深くに 3 つのインクルードがある場合、pageContext 内に設定された属性は、ほぼどこにでも設定できた可能性があります。その属性の使用法とインスタンスを見つけたいと思います。

4

1 に答える 1

4

${myObject}基本的にjspContext.findAttribute("myObject")、ページ、リクエスト、セッション、およびアプリケーションの各スコープで属性を検索し、最初nullに見つかった非値を返します。

IDE をどれだけスマートに作成できるかは、事前に (ビルド/コンパイル中に) どのスコープに設定されているかを知ることができません。考慮する必要がある要因が多すぎます (目に見えるものと見えないもの)。これを見つけるための唯一の信頼できる方法は、実行時に目的のスコープに明示的にアクセスして、プログラムで行うことです。

"myObject" is in:
<br>Page scope? ${not empty pageScope.myObject}
<br>Request scope? ${not empty requestScope.myObject}
<br>Session scope? ${not empty sessionScope.myObject}
<br>Application scope? ${not empty applicationScope.myObject}

上記の例はtrue、実際に設定されているスコープの 1 つを返す必要があります。

于 2009-12-11T16:00:45.287 に答える