1

次の問題を解決しようとしています。

すべてのリクエストにヘッダーとフッターを追加して、独自の viewResolver をセットアップしました (ありがとう、stackoverflow ;p)。これはうまくいきます。

問題は、特定のコンテナーにビューを返す私の ajax-requests も、もちろん意図されていないヘッダーとフッターを自動的に取得することです。

リクエストに「/ajax/」が含まれている場合、viewResolver を別の動作にするにはどうすればよいですか? 実際、jstl-Viewer は問題なく機能しますが、'/ajax/' で異なる動作を行うように spring に指示する方法がわからないため、現時点では、私自身のリゾルバーが使用される唯一のものです。

ここで私自身のリゾルバは、非常にシンプルで、ここから取ったものです:

public class ViewTemplate extends InternalResourceView {
    @Override
    protected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception {
        String dispatcherPath = prepareForRendering(request, response);
        request.setAttribute("partial", dispatcherPath.substring(nthOccurrence( dispatcherPath, '/' , 2 ) + 1));

        RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/views/layout.jsp");
        rd.include(request, response);
    }

    // more functions like nthOccurrence


}

indexOf("/ajax/") != -1 jstView を呼び出す必要がある場合、このリゾルバーに通知する必要がありますか? はいの場合、どのように?それとも私はそれを完全に間違っていますか?すべての非 ajax リクエストの場合と同様に、ヘッダー/フッターを維持したいと思います。

どんな助けでも大歓迎です!

ありがとう!

4

1 に答える 1

1

ViewResolver ではなく View のコードを正しく配置しました。ViewResolver を連鎖させることが良い解決策になると思います - ajax ビューに対して新しい ViewResolver を宣言するだけです。Ajax 関連のビューの場合、このビュー リゾルバーが値を返すようにします。それ以外の場合は null を返します。これにより、ViewResolver は自動的にチェーン内の次の ViewResolver を現在の ViewResolver にすることができます。

例えば。

<beans:bean id="ajaxViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <beans:property name="order" value="1"></beans:property>
    <beans:property name="prefix" value="/WEB-INF/views/" />
    <beans:property name="viewNames">
        <beans:list>
            <beans:value>ajax*</beans:value>
        </beans:list>
    </beans:property>
    <beans:property name="suffix" value=".jsp" />
</beans:bean>

上記の場合、コントローラーからビュー名を「ajaxsomeview」として返すと、ajaxViewResolver によって処理されます。「somethingelse」を返すと、現在の ViewResolver によって処理されます。

于 2012-07-29T22:23:07.293 に答える