我有一个集成了DWR 3和Spring 3的Web应用程序。所有请求都由Spring的DispatcherServlet处理。一切正常。当我请求一个AJAX请求时,它由使用@RemoteProxy注释的支持DWR服务bean正确处理。要返回响应,我的DWR服务bean将返回包含@DataTransferObject POJO的HTML字符串或仅返回普通POJO。
我想要做的是在DWR服务bean中我希望它将处理转发到Spring @Controller bean。 AJAX请求仍将由DWR服务处理,但实际处理委托给Spring控制器bean。换句话说,DWR服务bean只是实际服务的服务外观。这样我就不会重复逻辑。
这可能吗?
让我进一步澄清。
在普通的非AJAX应用程序中,当用户提交表单时,会发生以下情况:
在DWR-AJAX应用程序中,当用户提交表单时,会发生以下情况:
基本上对于AJAX应用程序, 在第2步之后,我希望它能够前进 到@Controller bean这样 一切都还在处理中 弹簧。
答案 0 :(得分:2)
简短的回答是否定的。
弹簧控制器的DWR请求中没有位置。 DWR对远程处理spring bean有很大的支持,但是控制器可以为这个等式带来很小的价值。
那就是说我没有理由认为spring 3.0风格的带注释的控制器不能用作暴露的DWR bean。限制将是返回类型不是ModelAndView
而是它只是你自己的模型对象。
答案 1 :(得分:0)
在这种情况下,我对使用注释了解不多。使用声明式方法,您可以执行以下操作。
在Spring XML中(注意fileOperationService是spring bean)
<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>