Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
DWR Spring集成:是否可以将DWR请求转发给Spring控制器?_Spring_Controller_Request_Dwr_Forward - Fatal编程技术网

DWR Spring集成:是否可以将DWR请求转发给Spring控制器?

DWR Spring集成:是否可以将DWR请求转发给Spring控制器?,spring,controller,request,dwr,forward,Spring,Controller,Request,Dwr,Forward,我有一个集成了DWR3和Spring3的web应用程序。所有请求都由Spring的DispatcherServlet处理。一切正常。当我请求一个AJAX请求时,它由带有@RemoteProxy注释的支持DWR服务bean正确处理。为了返回响应,我的DWR服务bean要么返回包含@DataTransferObject POJO的HTML字符串,要么仅返回普通POJO 我要做的是在DWR服务bean中,我希望它将处理转发给Spring@Controller bean。AJAX请求仍将由DWR服务处理

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

  • 它被转发给了 调度员服务
  • 然后是@Controller注释bean
  • 然后由@servicebean处理该处理
  • 之后,控制器返回ModelAndView
  • 在DWR-AJAX应用程序中,当用户提交表单时,会发生以下情况:

  • 它被转发给了调度员Servlet
  • 然后发送到带注释的@RemoteProxy 豆子。处理由 这个豆子。这是DWR的服务 豆子
  • 之后,这个远程代理bean返回@DataTransferObject POJO或纯HTML字符串
  • 基本上对于AJAX应用程序, 在第2步之后,我希望它向前 到@Controller bean,以便 所有的东西仍由计算机处理
    Spring。

    我对在这种情况下使用注释知之甚少。使用声明式方法,您可以执行以下操作

    在SpringXML中(注意fileOperationService是Springbean)

    您的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>
    
    
    
    简短的回答是否定的

    DWR请求中没有spring控制器的位置。DWR非常支持远程处理SpringBean,但控制器对这个等式没有什么价值


    也就是说,我没有理由认为Spring3.0风格的带注释的控制器不能用作公开的DWRBean。限制是返回类型不是
    ModelAndView
    ,而是您的模型对象本身。

    我尝试了WebContextFactory.get().forwardToString(…),但它没有被处理,甚至没有被转发到任何@Controller注释bean。我猜它无法访问Spring控制器?这里有一个解决方案应该可以工作,但它不能。我猜这家伙在用一个没有注释的Spring控制器?这里有一个类似的问题,但这个问题是问如何将请求从DWR转发到Struts操作:这里是DWR的官方示例,但这个示例没有使用Spring控制器。只是一个普通的servlet,我们有一个类似的场景,我们希望将DWR请求重定向到Spring控制器。我想我需要重申一下这个设计。经过几周的探索,我真的看不出将DWR请求转发给Spring控制器有什么价值
    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;
        }
    
    }
    
    <?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>