Интересно, существуют ли какие-либо хорошие методы для обращения к контроллерам Spring в JSP.
Предположим, что у меня есть контроллер:
@Controller
class FooController {
// Don't bother about semantic of this query right now
@RequestMapping("/search/{applicationId}")
public String handleSearch(@PathVariable String applicationId) {
[...]
}
}
Конечно, в JSP я могу записать:
<c:url value="/search/${application.id}" />
Но очень трудно изменить URL затем. Если Вы знакомый с направляющими/Grails затем Вы теперь, как эта разрешенная проблема:
redirect_to(:controller => 'foo', :action = 'search')
Но в Spring существует так много UrlMappers. Каждый UrlMapper имеет собственную семантическую и обязательную схему. Направляющие, подобные, схема просто не работает (если Вы не реализуете ее сами). И мой вопрос: есть ли еще удобные способы обратиться к контроллеру от JSP в Spring?
Надеюсь, я понял ваш вопрос. Я думаю, вы спрашиваете, как поддерживать URL-адреса, когда строки URL-адресов находятся в сопоставлениях jsp и контроллера.
Ваш Контроллер должен выполнять логику, ваш JSP должен выполнять вывод. Создание URL-адреса должно быть ответственностью контроллера, обрабатывающего его. Итак,
class SearchController {
@RequestMapping("/search/{applicationId}")
public String handleSearch(@PathVariable String applicationId) {
[...]
}
public String getUrl(Long applicationId) {
return "/search/" + applicationId;
}
}
class StartController {
private SearchController controller;
@ModelAttribute("searchUrl")
public String getSearchUrl() {
return fooController.getUrl(applicationId);
}
}
и в вашем start.jsp сделайте
<c:url value="${searchUrl}" />
Попробуйте использовать Apache в качестве интерфейса для переназначения URL-адресов:
http://www.simonecarletti.com/blog/2009/01/apache-rewriterule-and-query-string/
Таким образом, вы может изменить параметр applicationId из строки запроса на удобный URL.
Кроме того, вот документация для mod_rewrite: http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html