アプリケーションでSpring 3とTiles 2を使っているのですが、リダイレクトで少し困っています。 できれば、Controller1のメソッドからController2のメソッドにリダイレクトしたいのですが、今のところうまくいきません。
pageviews.propertiesファイルに新しいエントリを作成しようとしました。そうすれば、Controller1からこの名前を返すだけで、xmlファイルからタイルのdef名を調べることができます。
createRejectionEmail.(parent)=tilesView
createRejectionEmail.url=createRejectionEmail.page
redirectRejectionEmail.(class)=org.springframework.web.servlet.view.RedirectView
rediectRejectionEmail.contextRelative=true
redirectRejectionEmail.url=createRejectionEmail.page
しかし、以下のように返そうとすると、URLの一部にcreateRejectionEmailが含まれてしまいます。 mav.setViewName("redirectRejectionEmail"); を返します;
<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>
何かお手伝いやご指導を頂けると大変助かります!
コントローラから、return typeをModelAndViewに変更し、以下のコードを返します。これにより、リクエストがリダイレクトされ、新しいURLのコントローラがコールされます。
return new ModelAndView("redirect:/myURL");
あるいは、コントローラメソッドで HttpServletResponse を受け取り、リダイレクトを返すこともできます。
public void myController(HttpServletResponse response){
response.sendRedirect("/myURL");
}
@RequestMapping(value = "/timeout", method = RequestMethod.GET)
public ModelAndView loginForm(HttpServletRequest request,HttpServletResponse response) {
return new ModelAndView("redirect:/app/timeout");
}
このメソッドハンドラが呼び出されると、/app/timeoutコントローラにリダイレクトされます。