DWR Spring Integration: Можно ли переслать запрос DWR в Spring Controller? - PullRequest
2 голосов
/ 14 ноября 2010

У меня есть веб-приложение, которое интегрирует DWR 3 и Spring 3. Все запросы обрабатываются Spring DispatcherServlet. Все работает. Когда я запрашиваю AJAX-запрос, он корректно обрабатывается компонентом службы поддержки DWR с аннотацией @RemoteProxy. Чтобы вернуть ответ, мой компонент службы DWR возвращает либо строку HTML, включающую @DataTransferObject POJO, либо просто обычный POJO.

То, что я хочу сделать, - это служебный компонент DWR. Я хочу, чтобы он перенаправил обработку в bean-компонент Spring @Controller. Запрос AJAX будет по-прежнему обрабатываться службой DWR, но реальная обработка делегируется бину контроллера Spring. Другими словами, служебный компонент DWR - это просто фасад службы для реального обслуживания. Таким образом, я не дублирую логику.

Возможно ли это?

Позвольте мне уточнить.

В обычном приложении без AJAX, когда пользователь отправляет форму, вот что происходит:

  1. Это отправлено DispatcherServlet
  2. Затем к аннотированному компоненту @Controller.
  3. Затем обработка обрабатывается компонентом @Service.
  4. После этого контроллер возвращает ModelAndView.

В приложении DWR-AJAX, когда пользователь отправляет форму, вот что происходит:

  1. Все еще отправляется в DispatcherServlet
  2. Затем к аннотации @RemoteProxy боб. Обработка обрабатывается этот боб Это сервис DWR боб.
  3. После этого этот удаленный прокси-компонент возвращает либо @DataTransferObject POJO, либо просто простую строку HTML

В основном для приложения AJAX, после шага 2 я хочу переслать к бину @Controller, чтобы все еще обрабатывается Spring.

Ответы [ 2 ]

2 голосов
/ 24 декабря 2010

Краткий ответ - нет.

В запросе DWR нет места для контроллера пружины.DWR имеет большую поддержку для удаленного взаимодействия пружинных бобов, но есть небольшая ценность, которую контроллер мог бы привнести в это уравнение.использоваться в качестве экспонированного объекта DWR.Ограничением будет то, что тип возвращаемого значения не будет ModelAndView, скорее это будет просто объект вашей модели.

0 голосов
/ 24 декабря 2010

Я не знаю много об использовании аннотаций в этом случае. При декларативном подходе вы можете сделать следующее.

В весеннем 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>
...