2013-06-20 5 views
16

私のアプリケーションではSpring 3とTiles 2を使用しており、リダイレクトには少し問題があります。 好ましくは、Controller1メソッドからController2メソッドへの呼び出しやリダイレクトができるようにしたいと思いますが、これまでのところ失敗しています。あるコントローラメソッドから別のコントローラメソッドへのリダイレクト

私はpageviews.propertiesファイルに新しいエントリを作成しようとしました。そうすれば、私はController1からこの名前を返すことができ、xmlファイルから自分のタイルdef名を検索します。代わりにタイルのDEFSでルックアップを行うためにそれを使用する -

createRejectionEmail.(parent)=tilesView 
createRejectionEmail.url=createRejectionEmail.page 

redirectRejectionEmail.(class)=org.springframework.web.servlet.view.RedirectView 
rediectRejectionEmail.contextRelative=true 
redirectRejectionEmail.url=createRejectionEmail.page 

しかし、私は私のURLの下に表示のように戻ってみてくださいURLの一部としてcreateRejectionEmailが含まれています。 mav.setViewName( "redirectRejectionEmail"); 返品mav;

<definition name="createRejectionEmail.page" extends="brandedLayout"> 
    <put-attribute name="targetFunction" value="status" /> 
    <put-attribute name="content" value="/WEB INF/jsp/pages/status/createRejectionEmail.jsp" /> 
</definition> 

現在の設定は以下のとおりです。

<bean id="resourceViewResolver" 
class="org.springframework.web.servlet.view.ResourceBundleViewResolver" 
p:order="0" p:basename="config.spring.viewresolution.pageviews"/> 



<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer"> 
<property name="definitions"> 
    <list> 
    <value>/WEB-INF/jsp/**/views.xml</value> 
    </list> 
</property> 
</bean> 

ご協力いただければ幸いです。

答えて

38

戻り値の型をModelAndViewに変更し、下のコードを返すことができます。これにより、リクエストがリダイレクトされ、コントローラに新しいURLが呼び出されます。

return new ModelAndView("redirect:/myURL"); 

また、コントローラメソッドでHttpServletResponseを受け取り、リダイレクトを返すこともできます。

public void myController(HttpServletResponse response){ 
response.sendRedirect("/myURL"); 
} 
+0

ご回答いただきありがとうございます。私はこれを試して、私は 'SpringM MVC-for-OA'という名前のサーブレットで、 'redirect:/myapppath/status/displayEmailRejectionForm.html'という名前のビューを解決できませんでした。私は別のビューリゾルバを使用していますか?現在、我々はtiles2でResourceBundleViewResolverを使用しています – Carl

+0

OK Whew!それは働いている!手伝ってくれてどうもありがとう。私はまた、アプリケーションコンテキストにUrlBasedViewResolverを追加する必要がありました。私は本当にあなたが応答する時間を割いていただきありがとうございます! – Carl

+0

これは@RequestMappingアノテートされたメソッドのString戻り値の型でも正常に動作しているようです。 Carlの場合と同様に、キーはUrlBasedViewResolverクラスの設定を追加することです。 – Marin

6
@RequestMapping(value = "/timeout", method = RequestMethod.GET) 
    public ModelAndView loginForm(HttpServletRequest request,HttpServletResponse response) { 


       return new ModelAndView("redirect:/app/timeout"); 

    } 

この方法ハンドラの呼び出し、それは/アプリ/タイムアウトコントローラにリダイレクトします。

+0

魅力的なように動作します。アプリケーションがコンテキストを持っている場合、このメソッドは明示的に渡す必要なく解決します。 – deFreitas

関連する問題