Как создать 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
Ответы
Ответ 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 позволит вам сделать это прокси-способом, с которым я столкнулся, и различными способами.