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で明確に指定されています(強調鉱山):

...

現在のサーブレット コンテキストの外に拡張することはできませんが、指定されたパス名は相対パスにすることができます。パスが「/」で始まる場合、現在のコンテキスト ルートを基準として解釈されます。このメソッドはnull、サーブレット コンテナが を返せない場合に戻りますRequestDispatcher

...

于 2013-10-30T10:14:32.140 に答える