2012-02-21 22 views
1

私は、SimpleFormControllerからコントローラインタフェース(コントローラインタフェースを実装するコントローラ)にSpring MVCでコマンドオブジェクトを渡す必要があります。 Springのバージョンは2.5で、設定はXMLベースです。SimpleFormControllerからコントローラへのコマンドオブジェクトの受け渡し

SimpleFormControllerから、コントローラにリダイレクトが行われています。しかし、コントローラが指すjspにsession = "true"を追加したにもかかわらず、$ {command.myVal}の呼び出しはnullを返します。

SimpleFormControllerでリダイレクトコードは次のとおりです。SimpleFormControllerについては

return new ModelAndView("redirect:/SimpleController.do"); 

、sessionFormプロパティはこの問題を解決するにはspring.xml

<property name="sessionForm"><value>true</value></property> 

でtrueに設定されている、私は明示的に追加する必要がありましたHttpSessionへのSimpleFormControllerのコマンドオブジェクト:

HttpSession session = request.getSession(true); 
session.setAttribute("command", commandObj); 

SimpleControllerではObjへのStringのMapを作成し、それをViewに渡さなければなりませんでした。ここでもまた、セッションからコマンドObjを受け取りました。

HttpSession session = request.getSession(true); 
resultMap.put("command", session.getAttribute("command")); 

注釈を使用しない方が良い方法があるかどうかをご提案ください。これはどういうわけか、結果を得るために長らく残っているようです。

+0

を助け、私たちにリダイレクトコードをご提示ください。 –

+0

コマンドオブジェクトはセッションに格納されていますか?そうでない場合、その状態はリダイレクトから生き残ることはありません。 – GriffeyDog

+0

SimpleFormControllerのSessionFormはtrueです。 true

答えて

0

Springがコマンドオブジェクトを解析するためには、BaseCommandControllerを拡張したコントローラに直接フォームを送信する必要があります。

http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/web/servlet/mvc/BaseCommandController.html

あなたSimpleFormController自体はフォームの送信を受信した場合は、コントローラで使用するために、セッション中にコマンドを格納することができます。

(とあなたが春のMVCへのアノテーションベースのアプローチを活かし場合は勿論、これはすべて容易になるでしょう)

希望これは

+0

ありがとうございます。セッションを使用してこれを行う方法が見つかりましたが、それがSpringの方法ではないかどうかを知るのは素晴らしいことです。 –

+0

また、BaseCommandControllerは非推奨です。 –

+0

これはSimpleFormControllerよりも廃止予定です!どちらもv3.0では非推奨となりました(SpringのControllerインターフェイス+クラス階層の実装/拡張ではなく、プレーンなJavaクラスでの特別な注釈の使用)。それらを見て、彼らはこの種のもののために使うのがはるかにいいですし、2.5から利用可能です。あなたは、SimpleFormController自体がもはや「春の道」ではないと言うことさえできます。 – laher

関連する問題