根据要求
问题描述:
使用不同的视图解析器我尝试解决以下问题:根据要求
我已经建立了我自己的ViewResolver,添加页眉和页脚到我的所有请求(感谢,计算器; P)。这工作正常。
问题是,我的ajax-requests,返回一个视图到一个特定的容器,也自动获取页眉和页脚,当然是不打算。
如果请求包含'/ ajax /',如何让viewResolver采取不同的行为?实际上,jstl-Viewer对他们来说工作得很好,但目前,我自己的解析器是唯一使用的解析器,因为我不知道如何告诉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
}
我必须告诉这个解析器,如果的indexOf( “/ AJAX /”)= -1 jstView需要被调用! ?如果是,如何? 还是我做的完全错了?我想保留我的页眉/页脚,因为它们适用于所有非Ajax请求!
任何帮助表示赞赏!
谢谢!
答
你已经把View的代码放到了ViewResolver的右边,我认为一个好的解决方案可以是链接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处理。