Java 根据请求使用不同的viewresolver

Java 根据请求使用不同的viewresolver,java,ajax,spring,Java,Ajax,Spring,我尝试解决以下问题: 我已经设置了自己的viewResolver,在所有请求中添加了页眉和页脚(谢谢,stackoverflow;p)。这个很好用 问题是,我的ajax请求(将视图返回到特定容器)也会自动获取页眉和页脚,这当然不是我想要的 如果请求包含“/ajax/”,如何使viewResolver采取不同的操作?实际上,jstl查看器对他们来说很好,但目前,我自己的解析器是唯一使用的解析器,因为我不知道如何告诉spring在“/ajax/”上采取不同的操作 这里是我自己的解析器,非常简单,就是

我尝试解决以下问题:

我已经设置了自己的viewResolver,在所有请求中添加了页眉和页脚(谢谢,stackoverflow;p)。这个很好用

问题是,我的ajax请求(将视图返回到特定容器)也会自动获取页眉和页脚,这当然不是我想要的

如果请求包含“/ajax/”,如何使viewResolver采取不同的操作?实际上,jstl查看器对他们来说很好,但目前,我自己的解析器是唯一使用的解析器,因为我不知道如何告诉spring在“/ajax/”上采取不同的操作

这里是我自己的解析器,非常简单,就是从这里取来的:

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


}
公共类视图模板扩展了InternalResourceView{
@凌驾
受保护的void RenderMergeDoutpModel(映射模型、HttpServletRequest请求、HttpServletResponse响应)引发异常{
String dispatcherPath=prepareForRendering(请求、响应);
request.setAttribute(“部分”,dispatcherPath.substring(第n次出现(dispatcherPath,“/”,2)+1));
RequestDispatcher rd=request.getRequestDispatcher(“/WEB-INF/views/layout.jsp”);
包括(请求、响应);
}
//更多功能,例如
}
我是否必须告诉这个解析器如果indexOf(“/ajax/”)=-1需要调用jstView吗?如果是,怎么做? 还是我完全错了?我想保留我的页眉/页脚,因为它们适用于所有非ajax请求

感谢您的帮助


谢谢

您已经将视图的代码而不是ViewResolver放对了,我认为一个好的解决方案可能是链接ViewResolver-只需为ajax视图声明一个新的ViewResolver。对于Ajax相关的视图,让这个视图分解器返回一个值,否则返回NULL,这将自动获得VIEW解析器来考虑链中的下一个VIEW解析器,它可以是当前的ViewResolver。 例如


阿贾克斯*

在上述情况下,如果您从控制器返回视图名称作为“ajaxsomeview”,则它将由ajaxViewResolver处理,如果您返回“somethingelse”,则它将由您当前的ViewResolver处理。

您将视图而非ViewResolver的代码放对了,我认为一个好的解决方案是链接ViewResolver——只需为ajax视图声明一个新的ViewResolver。对于Ajax相关的视图,让这个视图分解器返回一个值,否则返回NULL,这将自动获得VIEW解析器来考虑链中的下一个VIEW解析器,它可以是当前的ViewResolver。 例如


阿贾克斯*
在上述情况下,如果您从控制器返回视图名称作为“ajaxsomeview”,则它将由ajaxViewResolver处理,如果您返回“somethingelse”,则它将由您当前的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>