Grails是一個MVC框架。如果您想直接將URL映射到GSP(不通過控制器和操作進行重定向),則需要在您的UrlMappings.groovy
中向Grails解釋此問題。在那裏你可以定義你的「快捷方式」。例如:
static mappings = {
"/$viewName"(view:"/index") {
constraints {
viewName([some constraints])
}
}
}
這將不通過控制器渲染views/index.gsp
。如果您沒有爲這些URL定義控制器映射(或至少一個視圖映射),則不能使用grails過濾器:
如果您確實想截取所有請求,您可以將servlet過濾器添加到您的grails應用程序中這樣的:
import javax.servlet.*
import org.springframework.web.context.support.WebApplicationContextUtils;
class TestFilter implements Filter {
def applicationContext
void init(FilterConfig config) throws ServletException {
applicationContext = WebApplicationContextUtils.getWebApplicationContext(config.servletContext)
}
void destroy() {
}
void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("this filter has been called");
}
}
在這裏你可以做你重定向或者基於applicationcontext
和當前request
效果。
您需要將此過濾器添加到您的web.xml
。在如何做到這一點,看看:How do i use a servlet in my grails app?
我應該澄清。我通常不會重定向到'/ test.gsp',只是在某些情況下,這就是爲什麼有必要使用過濾器而不是URL映射來做到這一點(除非有辦法制作條件映射?) – 2012-03-30 11:03:28
什麼樣的約束你有?它是與DB有關還是一些靜態約束? – Chris 2012-03-30 13:14:41
我正在檢查的東西與問題無關。這個問題沒有做任何檢查就存在。 – 2012-03-31 00:02:56