Подтвердить что ты не робот

Как создать URL-адрес на основе контроллера и метода действий в Spring MVC?

Я использую Spring MVC 3.0

У меня есть страница guestbook.jsp, где я хочу создать ссылку, указывающую на способ входа в систему BookBookController.

Это простая задача, с которой справляются большинство веб-фреймворков (например, grails делает это с тегом g: link), но я не мог найти никакой документации по этому поводу в официальных документах SpringMVC.

Итак, я почесываю голову - Является ли эта функция в некоторой библиотеке тегов? Предоставляет ли структура его? Должен ли я расширять рамки, чтобы заставить это работать?

Обратите внимание: я не беру на себя жесткое кодирование url (это очевидное, но слабое решение), а скорее генерирование его на основе имени контроллера и действия.

UPDATE: Spring MVC не предоставляет эту функцию. Однако есть билет JIRA. Вы можете проголосовать здесь https://jira.springsource.org/browse/SPR-5779

4b9b3361

Ответ 1

Короткий ответ - нет, вы не можете сделать это с помощью Spring MVC в настоящее время.

Это позор, потому что вы можете сделать это в других рамках, включая Grails (который использует Spring MVC под капотом).

См. обсуждение здесь, которое включает ссылку на запрос функции Spring, чтобы добавить это (проголосуйте за это!)

Ответ 2

Spring MVC использует стандартные теги JSTL в JSP, поэтому:

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

В вашем контроллере:

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

Ответ 3

Аннотировать свой метод входа с помощью @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>

Это предполагает, что ваш сервлет диспетчера ищет *.html URL-адреса.

Ответ 4

Долгое время я думал о реализации чего-то подобного с помощью прокси CGLib, но был слишком ленив. Оказывается, Spring библиотека HATEOS позволит вам сделать это прокси-способом, с которым я столкнулся, и различными способами.