2010-11-14 50 views
2

我有一個集成了DWR 3和Spring 3的Web應用程序。所有請求都由Spring的DispatcherServlet處理。一切正常。當我請求一個AJAX請求時,通過用@RemoteProxy註釋的後備DWR服務bean正確處理它。爲了返回一個響應,我的DWR服務bean返回一個包含@DataTransferObject POJO的HTML字符串,或者返回普通的POJO。DWR Spring Integration:是否可以將DWR請求轉發給Spring Controller?

我想要做的是在DWR服務bean中,我希望它將處理轉發給Spring @Controller bean。 AJAX請求仍將由DWR服務處理,但實際處理委託給Spring控制器bean。換句話說,DWR服務bean只是實際服務的服務外觀。這樣我就不會重複邏輯。

這可能嗎?

讓我進一步澄清。

在一個正常的非AJAX應用中,當用戶提交表單,這裏發生了什麼:

  1. 它轉發到 DispatcherServlet的
  2. 然後到@Controller的豆。
  3. 處理由@Service bean處理。
  4. 之後,控制器返回一個ModelAndView。

在DWR-AJAX應用中,當用戶提交表單,這裏發生了什麼:

  1. 它轉發到DispatcherServlet的還是
  2. 然後註釋 豆一@RemoteProxy。處理由 這個bean處理。這是DWR的服務 bean。
  3. 之後,這個偏遠的代理bean返回任何一個@DataTransferObject POJO或只是簡單的HTML字符串

基本上爲AJAX應用程序, 步驟2後,我希望它轉發 到@Controller豆使 一切仍然由 處理。

+0

我嘗試了WebContextFactory.get()。forwardToString(...),但它沒有被處理,甚至沒有被轉發到任何@Controller註釋的bean。我猜測它沒有訪問Spring控制器? – chris 2010-11-14 08:54:18

+0

下面是一個應該工作的解決方案,但事實並非如此。我猜這裏的人使用了一個沒有註釋的Spring Controller? http://forum.springsource.org/showthread.php?t=85101 – chris 2010-11-14 08:56:44

+0

這裏有一個類似的問題,但這是問如何將請求從DWR轉發到Struts動作:http://markmail.org/message/he45oslbejuqieos#查詢:+頁面:1 + mid:7tpq3shrcw5i4aup +狀態:結果 – chris 2010-11-14 09:53:15

回答

2

簡短的回答是否定的。

在彈簧控制器的DWR請求中沒有地方。 DWR對遠程處理彈簧豆有很大的支持,但是控制器可以給這個等式帶來很小的價值。

這就是說我沒有理由認爲Spring 3.0風格的註釋控制器不能用作公開的DWR bean。限制是返回類型不是ModelAndView,而只是它自己的模型對象。

+0

經過幾個星期的探索之後,我並沒有看到任何將DWR請求轉發給Spring控制器的任何價值 – chris 2011-01-12 10:22:17

0

我對這種情況下使用註釋不太瞭解。通過聲明式方法,您可以執行以下操作。

春天XML(注意fileOperationService是春豆)

<bean name="BookRequestAjax" class="com.bookie.struts.BookRequestAjax"> 
     <property name="fileOperationService" ref="fileOperationService"/> 
    </bean> 

你豆

public class BookRequestAjax { 
    FileOperationService fileOperationService; 
    public void deleteFile(String fileName){ 
     try{ 
      fileOperationService.deleteFile(fileName); 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
    } 

    public void setFileOperationService(FileOperationService fileOperationService) { 
     this.fileOperationService = fileOperationService; 
    } 

} 

你的dwr.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" "http://www.getahead.ltd.uk/dwr/dwr10.dtd"> 
<dwr> 
    <allow> 
    <create creator="spring" javascript="BookRequestAjax"> 
     <param name="beanName" value="BookRequestAjax" /> 
    </create> 
    </allow> 
</dwr>