从一种控制器方法重定向到另一种控制器方法
Posted
技术标签:
【中文标题】从一种控制器方法重定向到另一种控制器方法【英文标题】:Redirect from one controller method to another controller method 【发布时间】:2013-06-17 14:49:33 【问题描述】:我在我的应用程序中使用 Spring 3 和 Tiles 2,并且在重定向时遇到了一些麻烦。 最好,我希望能够从 Controller1 方法调用或重定向到 Controller2 方法,但到目前为止还没有成功。
我尝试在 pageviews.properties 文件中创建一个新条目。这样我就可以从 Controller1 返回这个名称,它会从 xml 文件中查找我的切片定义名称。
createRejectionEmail.(parent)=tilesView
createRejectionEmail.url=createRejectionEmail.page
redirectRejectionEmail.(class)=org.springframework.web.servlet.view.RedirectView
rediectRejectionEmail.contextRelative=true
redirectRejectionEmail.url=createRejectionEmail.page
但是,当我尝试如下所示返回时,我的 URL 包含 createRejectionEmail 作为 URL 的一部分 - 而不是使用它在磁贴定义中进行查找。 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>
任何帮助和指导将不胜感激!
【问题讨论】:
【参考方案1】:从您的控制器中,您可以将返回类型更改为 ModelAndView 并返回下面的代码。这将重定向请求并为新 URL 调用控制器。
return new ModelAndView("redirect:/myURL");
或者,您可以在控制器方法中接收 HttpServletResponse 并返回重定向。
public void myController(HttpServletResponse response)
response.sendRedirect("/myURL");
【讨论】:
您好,感谢您的回复。我尝试了这个,我得到了以下内容。无法在名称为“Spring-MVC-for-OA”的 servlet 中解析名称为“redirect:/myapppath/status/displayEmailRejectionForm.html”的视图。我应该使用不同的视图解析器吗?目前,我们正在使用 ResourceBundleViewResolver 和 tiles2 好的唷!它正在工作!非常感谢你的帮助。我还必须将 UrlBasedViewResolver 添加到我的应用程序上下文中。非常感谢您抽出时间回复! 这似乎工作正常,即使 @RequestMapping 注释方法的 String 返回类型。就像 Carl 的情况一样,关键是添加 UrlBasedViewResolver 类配置。 这对我有用,无需任何修改。使用 spring 4.1+ 和 hibernate 5.0+。 这是不同用户的【参考方案2】:@RequestMapping(value = "/timeout", method = RequestMethod.GET)
public ModelAndView loginForm(HttpServletRequest request,HttpServletResponse response)
return new ModelAndView("redirect:/app/timeout");
当此方法处理程序调用时,它会重定向到 /app/timeout 控制器。
【讨论】:
像魅力一样工作,最好的是,如果您的应用程序有上下文,那么此方法无需显式传递即可解决它。以上是关于从一种控制器方法重定向到另一种控制器方法的主要内容,如果未能解决你的问题,请参考以下文章
Playframework 中 HTTPS 协议中的重定向控制器方法