Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Annotated Spring MVC + dojo.xhrPost()


Автор: skulyk 16.6.2009, 16:48
всем добрый день!
есть проблема. существует аннотированный контроллер, который должен обрабатывать переход по ссылке

Код

@Controller
public class UpdateController {
    @RequestMapping("/views/subtemplates/objects/lvg/indexLvg.jsp")
    public void generateIndexLvgUpdate() throws Exception {
        System.out.println("call index LVG updates controller");
    }


обращение к этой ссылке происходит из java script по Ajax запросу с помощью dojo:

Код

   dojo.xhrPost({
        url: "views/subtemplates/objects/lvg/indexLvg.jsp",
        content: "LVG",
        handleAs: "text",
        load: function(respData, args) {
            getResponse(respData);
        }
     },
     error: function(data, args) {
            console.warn("error!");
     }
  });


при этом контроллер не отрабатывает. у меня есть класс ControllerInterceptor, который отлавливает все ссылки, он обращение к indexLvg.jsp тоже не получает.

возможно, это связано с ajax запросом и его нужно обрабатывать как-то не так. Буду рада любому совету и помощи
спасибо!

Автор: garbuz 16.6.2009, 17:05
Вроде как спринг явно не поддерживает ajax. Надо юзать DWR или еще какую-нить штуку. В тоже время можно написать обчыный сервлет, который будет обслуживать ajax запросы.

Автор: MisterCleric 16.6.2009, 17:10
вопрос:
а если на прямую вызвать 
views/subtemplates/objects/lvg/indexLvg.jsp

Аякс-то аяксом, а вот урлы сервером должны приниматься по-любом.
Понятно, что у тебя там какая-то логика завязана на аякс, но запрос-то должен пойти на сервак...
И как выглядит настройка spring в web.xml ?
Как тут говорят: "web.xml в студию!" 

Да, и еще такое: а если попробовать еще добавить к 
Цитата

url: "views/subtemplates/objects/lvg/indexLvg.jsp",


контекстный путь приложения. Для теста, думаю, можно ручками прописать твой http://localhost:[yourPort]/[yourAppContext]/

Автор: skulyk 16.6.2009, 17:16
у нас в проекте используется dwr, я не могу найти, как его использовать в таком случае.  Или нужно просто в функции, которая получает ответ от сервера прописывать вызов dwr метода?
этот метод является общим, т.е. ссылка меняется. Контроллер - идеальный для меня вариант, если бы он мог срабатывать по обращению к этим ссылкам. 
я нашла такую ссылку http://static.springframework.org/spring-webflow/docs/2.0.x/reference/html/ch11s05.html, но у меня пока не получилось все подключить.
Возможно, кто-то использовал tiles в этих целях?

Автор: MisterCleric 16.6.2009, 17:20
Цитата

Вроде как спринг явно не поддерживает ajax.


Считаю отнюдь не верным заключением: аякс не аякс - запросы все-равно должны идти на сервер
Да и еще вот опровержение 
http://www.springsource.org/webflow

я думаю, именно эту часть и юзает 
skulyk, 

Автор: skulyk 16.6.2009, 17:30
Цитата(MisterCleric @ 16.6.2009,  17:10)
вопрос:
а если на прямую вызвать 
views/subtemplates/objects/lvg/indexLvg.jsp

к сожалению, вызвать напрямую views/subtemplates/objects/lvg/indexLvg.jsp не получается, при загрузке стартуются компоненты YUI, а все ссылки прописаны в index.jsp и он их не находит, если вызвать напрямую. Контроллер отрабатывает, если, например прописать ссылку которая указана в <img src="ссылка">, а через аякс работать не хочет. добавление контекста не помогает. я могу привести web.xml, но там много всего лишнего, я уверена, что контроллеры работают правильно

Автор: MisterCleric 16.6.2009, 17:38
Цитата

 dojo.xhrPost({


стоп. А действительно ли это должен быть POST?
а что это такое?
Цитата

 content: "LVG",


по-моему контент должен содержать или JSON-объект или пары имя: значение, что и будет реквест параметрами. 
Может там еще Dojo не отправляет запрос, так как сам объект XmlHttpRequest не правильно сформирован.

Ошибки javascript в студию!

Автор: skulyk 16.6.2009, 17:51
этот метод отрабатывает и возвращает содержимое страницы indexLvg.jsp. ошибок нет

Автор: goodday1941 16.6.2009, 18:02
первое что хочу заметить аджакс не аджакс разници для сервера принципиально нет.. так что говорить что спринг не работает с аджаксом не разумно....

что то мне кажется что вы просто не отправляете запрос ) попробуйте фаербагом посмотреть отсылается ли вообще запрос на сервер

Добавлено через 6 минут и 35 секунд
Цитата

content    Object    Contains properties with string values. These properties will be serialized as name1=value2 and passed in the request.


Добавлено через 7 минут и 16 секунд
скорее всего там и валится...

поставте фаербаг себе сэкономит кучу времени

Добавлено через 8 минут и 44 секунды
мда что то все что я сочинил уже написал MisterCleric )

Автор: MisterCleric 16.6.2009, 18:14
goodday1941

Цитата

мда что то все что я сочинил уже написал MisterCleric ) 


RESPECT, дружище !!!  smile 

Автор: skulyk 16.6.2009, 18:17
посмотрела через FireBug, content=undefinedб прошу прощение за ошибку. запрос отрабатывает, в консоли это видно
в ответ приходит содержимое indexLvg.jsp в текстовом виде, в консоли тоже это видно.
вопрос в том, должен ли срабатывать спринговый контроллер при таком обращении к этой ссылке? или для этого нужно подключать какие-то спринговые модули?

Автор: goodday1941 16.6.2009, 18:26
нет, если я тебя правильно понял ))

Автор: MisterCleric 16.6.2009, 18:26
Цитата

должен ли срабатывать спринговый контроллер при таком обращении к этой ссылке


ну эт нужно читать, как мепинги правильно организовывать...

Автор: goodday1941 16.6.2009, 18:28
на сколько я понял ты не обращался к спринговому контроллеру, а просто напрямую к жспихе

Автор: skulyk 17.6.2009, 15:15
я сама поняла, что идет прямой запрос к jsp, но не поняла почему. пробовала многие варианты маппинга, но не смогла добиться вызова контроллера по ссылке
views/subtemplates/objects/lvg/indexLvg.jsp если только не прописать в web.xml

Код

<servlet-mapping>
        <servlet-name>centricstor</servlet-name>
        <url-pattern>/views/*</url-pattern>
</servlet-mapping>


окончательное решение: ссылки на jsp страницы были заменены на ссылки вида "objects/lvg"
web.xml:
Код

<servlet-mapping>
        <servlet-name>centricstor</servlet-name>
        <url-pattern>/objects/*</url-pattern>
    </servlet-mapping>


в контроллере:
@RequestMapping("/objects/lvg")

контроллер возвращает 
return new ModelAndView("../views/subtemplates/objects/lvg/indexLvg.jsp", "model", model);

теперь контроллер вызывается и потом показывается сама jsp страница

запрос так и отправляется через dojo.xhrPost() так что ajax действительно был ни при чем.

спасибо всем, кто откликнулся!

Автор: MisterCleric 17.6.2009, 15:27
Цитата

return new ModelAndView("../views/subtemplates/objects/lvg/indexLvg.jsp", "model", model);


можно еще в конфиге centricstor-сервлета прописать ViewResolver что упростить возврат ссылки на вью

Код

<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
        <property name="prefix" value="../views/subtemplates/objects/lvg/" />
        <property name="suffix" value=".jsp" />
    </bean>


и потом код из цитаты превращается в:
Код

return new ModelAndView("indexLvg", "model", model);

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)