我有一个集成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应用程序中,当用户提交表单时,会发生以下情况:
DispatcherServlet
。
在DWR应用程序中,当用户提交表单时,会发生以下情况:
,
基本上,对于AJAX应用程序,在第2步之后,我希望它转发到@Controller bean,以便所有东西都由Spring处理。
发布于 2010-12-24 11:25:05
简短的回答是否定的。
在DWR请求中没有弹簧控制器的位置。DWR对远程处理spring有很大的支持,但是控制器可以给这个方程带来的价值很少。
尽管如此,我没有理由认为Spring3.0风格的带注释的控制器不能用作公开的DWR。限制是返回类型将不是ModelAndView
,而是您的模型对象--它是self。
发布于 2010-12-24 10:05:02
在这种情况下,我不太知道如何使用注释。使用声明式方法,您可以执行以下操作。
在spring中(注意,fileOperationService是spring )
<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>
https://stackoverflow.com/questions/4176776
复制相似问题