2

我有一个集成了 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 应用程序中,当用户提交表单时,会发生以下情况:

  1. 它被转发到 DispatcherServlet
  2. 然后到 @Controller 注释的 bean。
  3. 然后由@Service bean 处理处理。
  4. 之后,控制器返回一个 ModelAndView。

在 DWR-AJAX 应用程序中,当用户提交表单时,会发生以下情况:

  1. 它仍然转发到 DispatcherServlet
  2. 然后到 @RemoteProxy 注释的 bean。该处理由该 bean 处理。那是 DWR 的服务 bean。
  3. 之后,这个远程代理 bean 返回一个 @DataTransferObject POJO 或者只是纯 HTML 字符串

基本上对于 AJAX 应用程序,在第 2 步之后,我希望它转发到 @Controller bean,以便一切仍由 Spring 处理。

4

2 回答 2

2

简短的回答是否定的。

弹簧控制器的 DWR 请求中没有位置。DWR 对远程 Spring bean 有很好的支持,但是控制器可以为这个等式带来的价值很小。

也就是说,我没有理由认为 spring 3.0 风格的带注释的控制器不能用作暴露的 DWR bean。限制是返回类型不是ModelAndView它,而是你的模型对象,它是自我。

于 2010-12-24T11:25:05.490 回答
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>
于 2010-12-24T10:05:02.173 回答