0

在我的 JSF 应用程序中,我想实现一个 Web 过滤器来更改所用设备功能中的请求视图(我使用 spring-mobile 设备解析器)。

我的过滤器中有这个:

    String requestURI = request.getRequestURI();

    Device device = DeviceUtils.getCurrentDevice(request);

    if (!requestURI.contains("/mobile") && device.isMobile()) {
        String newUri = requestURI.replace("/contextroot/faces/html/", "/contextroot/faces/html/mobile/");
        request.getRequestDispatcher(newUri).forward(request, response);
    }
    else {
        filterChain.doFilter(request, response);
    }

但我得到一个例外

/contextroot/faces/html/mobile/consult/consult.xhtml Not Found in ExternalContext as a Resource

我究竟做错了什么?

4

1 回答 1

0

采用HttpServletRequest#getRequestDispatcher()相对于上下文根的路径,因此您不应包含上下文根本身的路径。这在javadoc(强调我的)中有明确规定:

...

指定的路径名​​可以是相对的,尽管它不能扩展到当前 servlet 上下文之外。如果路径以“/”开头,则将其解释为相对于当前上下文根。null如果 servlet 容器无法返回RequestDispatcher.

...

于 2013-10-30T10:14:32.140 回答