2012-07-29 45 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處理。