Как я могу создать URL на основе контроллера и метода действия в Spring MVC? - PullRequest
13 голосов
/ 17 мая 2011

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

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

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

Итак, я чешу голову - эта функция есть в какой-нибудь библиотеке тегов? Раскрывает ли это фреймворк? Нужно ли расширять фреймворк, чтобы это работало?

Обратите внимание, я не занимаюсь жестким кодированием URL (что является очевидным, но слабым решением), а скорее генерирую его на основе контроллера и имени действия.

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

Ответы [ 4 ]

9 голосов
/ 17 мая 2011

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

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

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

4 голосов
/ 17 мая 2011

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

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

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

@RequestMapping(value = "/guestBook")
public String handleGuestBook() { ... }
1 голос
/ 31 октября 2013

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

1 голос
/ 17 мая 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...