如何在Spring MVC中基于控制器和操作方法创建URL?

时间:2011-05-16 20:27:40

标签: java spring jsp spring-mvc

我正在使用Spring MVC 3.0

我有一个guestbook.jsp页面,我想创建一个指向GuestBookController登录方法的链接。

这是一个简单的任务,大多数Web框架都会处理这个问题(例如Grails用g:link标签),但我在官方SpringMVC文档中找不到任何相关文档。

所以我挠头了 - 这个功能在某些标签库中吗?框架是否暴露了它?我是否必须扩展框架才能使其正常工作?

请注意,我没有采用硬编码(这是一个明显但很弱的解决方案),而是基于控制器和操作名称生成它。

更新: Spring MVC不提供此功能。虽然有一张JIRA票。您可以在这里投票https://jira.springsource.org/browse/SPR-5779

4 个答案:

答案 0 :(得分:9)

简短的回答是否定的,目前你不能用Spring MVC做到这一点。

这很遗憾,因为你可以在其他框架中做到这一点,包括Grails(在引擎盖下使用Spring MVC)。

参见讨论here,其中包含添加此功能的Spring功能请求的链接(投票支持!)

答案 1 :(得分:4)

Spring MVC在JSP中使用标准的JSTL标记,所以:

<c:url value="/guestBook.html" var="guestBookLink" />
<a href="${guestBookLink}">Guest Book</a>

在您的控制器中:

@RequestMapping(value = "/guestBook")
public String handleGuestBook() { ... }

答案 2 :(得分:1)

使用@RequestMapping注释您的登录方法,如下所示:

@Controller
public class GuestBookController {
  ...
  @RequestMapping(value="/mycontextroot/login", method = RequestMethod.GET)
  public String login() {
    ...
  }
  ...
}

然后,在JSP中,创建一个类似这样的链接:

<c:url var="loginlink" value="/mycontextroot/login.html">
</c:url>
<a href="${loginlink}">Login</a>

这假设您的调度程序servlet正在查找* .html URL。

答案 3 :(得分:1)

很长一段时间以来,我一直在考虑使用CGLib代理实现类似的东西但是太懒了。它似乎Spring HATEOS library将允许您以我所要求的代理方式和其他各种方式进行。