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

14

我正在使用Spring MVC 3.0

我有一个guestbook.jsp页面,我想创建一个链接,链接到GuestBookController的login方法。

这是大多数web框架都可以处理的简单任务(例如,grails使用g:link标签),但我在官方的SpringMVC文档中找不到任何关于此的文档。

所以我很困惑-是否有一些标记库中包含此功能?框架是否公开了它?我必须扩展框架才能使其工作吗?

请注意,我讨论的不是硬编码URL(这是一种显而易见但效果较差的解决方案),而是根据控制器和动作名称生成它。

更新: Spring MVC不提供此功能。但是有一个JIRA票据。您可以在此处投票 https://jira.springsource.org/browse/SPR-5779

4个回答

9

简短的回答是不行,目前Spring MVC无法实现这一点。

这很遗憾,因为其他框架包括Grails(它在内部使用Spring MVC)都可以实现。

请查看讨论此处,其中包括一个链接到Spring功能请求的链接(请为其投票!)



3

Spring MVC 使用 JSP 中的标准 JSTL 标签,因此:

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

在您的控制器中:
@RequestMapping(value = "/guestBook")
public String handleGuestBook() { ... }

2

Spring HATEOAS库提供了一种API来以各种方式生成到MVC控制器方法的链接。

例如:

URI url = linkTo(methodOn(GuestBookController.class).login()).toUri();

0

在您的登录方法上使用 @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。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接