JSPファイルを完全に再設計した場合(非常に醜い方法で)、型安全性を追加することは可能かもしれません。
サーブレットは、Javaコードなので型の安全性を提供します。あなたがクラスをリファクタリングして何かを逃した場合、コンパイラはあなたがそれを逃したとすぐにあなたに伝えます。しかし、サーブレットはサーブレットに代わるものであり、よりダイナミックで速い開発ペースを提供しています(無限のout.write
タグのオープン、終了、引用符のエスケープなど)。
あなたが気づいたように、EL式は基本的に後で評価され、何かがオフのときに実行時に失敗する文字列です。 precompile the JSPsの場合でも、ELは生成されたサーブレットに文字列として残るため、それでも失敗します。それらはタグにそのまま渡されます。evaluate it themselves、またはJSP 2.xバージョンを使用している場合、サーブレットコンテナ自体は値として渡す前に式呼び出しを評価呼び出しでラップします。バージョンのための基本的
のようなタグのため、JSP 2未満:サーブレットで
myTagInstance.setValue("${bean.someProp}");
:
<my:tag value="${bean.someProp}" />
あなたのような結果が得られます。
タグ自体は、実行時にその文字列の評価を行います。あなたが任意のより良い得ることはありませんJSP 2について
は、評価はまだ実行時に発生するが、サーブレットコンテナのようなコードを生成し、タグから離れてこの負担をとります。
myTagInstance.setValue((SomePropTypeCastHere) ProprietaryServletContainerEvaluationUtil.evaluate("${bean.someProp}"));
た場合の内容評価が行われたときにオブジェクトそのものが期待されたものではない場合、奇妙な結果やエラーが発生します。
静的な型指定をJSPに強制する唯一の方法は、JavaコードをJSPに戻すことです(ELが排除するために考案したものです)。だから私は懇願して、醜い方法であなたのJSPを変更しなければならないと言ったのです。
If all your tags can use <rtexprvalue>true</rtexprvalue>
values, you can use scriptlets to enforce type safety。以下のような
タグ:
<my:tag value="<%=bean.getSomeProp()%>" />
は今これに変換されます:someProp
プロパティは、名前変更、削除、タイプまたは何を変更した場合
myTagInstance.setValue(bean.getSomeProp());
、コンパイラはそれをご紹介することができます。 IDE自体はあなたに言うことができるはずです、あなたはprecompile the JSPsする必要はありません。
私が間違っていないならば、Springタグはランタイムエクスプレッションをサポートしているので、これはうまくいくはずです...もしあなたがあなたのJSPを混乱させたいならば!
完成のためのIDEのサポートに関しては、スクリプトレットではありますがELではありません。 ELの場合は同じ議論のため、実行時に発生します。 JSPが実行されるときにIDEがコンテキスト(ページ、リクエスト、セッションなど)を知る方法は?