我有一个包含数百个控制器的Spring MVC应用程序。在控制器中,我使用通常的@Requestmapping映射:
@RequestMapping(value="/someUrl.go")
public String myMethod () {
// implementation here;
}
现在,在JSP页面中,我像这样构建到另一个页面的链接:
<a href="someUrl.go">Link to another page</a>
问题:目标页面的相对URL, "someUrl。go"和其他数百个类似的代码在我的应用程序中被编写了两次——一次在注释中,一次在链接到它的JSP中。实际上,有些页面是从多个JSP链接到的,因此它们的URL被编写了很多次。
Spring MVC提供任何解决方案吗?理想情况下,我希望对Spring MVC所知道的所有URL进行反向映射,并且每个URL都有一个唯一的名称,这样我就可以在JSP中使用该名称来获取URL,而不是对其进行硬编码。
更新:这似乎是我如何在Spring MVC中创建基于控制器和动作方法的URL的副本?在另一个问题中,他们问的是Spring MVC 3。在Spring 4中解决了这个问题,如下所示(https://jira.spring.io/browse/SPR-5779)
我找到了解决方案,在这里解释(https://jira.spring.io/browse/SPR-5779)。JSP代码如下所示:
<%@ taglib uri="http://www.springframework.org/tags" prefix="s" %>
<a href="${s:mvcUrl('AC#myMethod').build()}">Link to another page</a>
其中AC是我的控制器类的骆驼大小写首字母。如果因为控制器有相似的名称而产生冲突,则可以显式地为每个带注释的方法分配一个名称,如下所示:
@RequestMapping ( name = "myName", value= ...)