2012-07-29 43 views
1

使用不同的视图解析器我尝试解决以下问题:根据要求

我已经建立了我自己的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请求!

任何帮助表示赞赏!

谢谢!

回答

1

你已经把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处理。