2010-11-14 75 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> 
相关问题