我想知道在JSP中是否有解决Spring控制器的良好实践。
假设我有控制器:
@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}" />
但是很难改变网址。如果您熟悉Rails / Grails,那么现在您可以解决此问题:
redirect_to(:controller => 'foo', :action = 'search')
但是在Spring中有很多UrlMappers。每个UrlMapper都有自己的语义和绑定方案。 Rails一样的方案根本不起作用(除非你自己实现)。我的问题是:在Spring中有没有更方便的方法来解决JSP中的控制器?
答案 0 :(得分:10)
我希望我理解你的问题。我想你的问题是当url字符串在jsp和控制器映射中时如何维护url。
您的Controller应该执行逻辑,您的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}" />
答案 1 :(得分:0)
尝试使用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