2012-04-24 16 views
1

Springでビューコマンドのタイプを定義することはできますか?今のように、私たちはコマンドクラスで何かを変えるのは危険です。これらのクラスのプロパティはビュー(path="myDto.persons[0].name")によって使用されますが、コマンドクラス内の何かが変更された場合、ビューは実行時にのみ失敗します。Springビューの安全性

MVCスタックの他の部分はすべてテストされているので、必要に応じて安全にリファクタリングを実行できます。唯一の問題は、パスが「単なる文字列」なので、特定のコマンドを使用するあらゆる場所で検索や置換を行うことができないためです。

Springに実際にどのような型があるかを伝える方法があれば大きな助けになるでしょう。したがって、私たちが.jspのプリコンパイルを行うときに検証することができます。追加のボーナスは、ビューを編集するときにも完了するでしょうが、それはIDEの問題であると思います。

だから、どうやってこれが可能か知っていますか?

答えて

1

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がコンテキスト(ページ、リクエスト、セッションなど)を知る方法は?