Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ajax и dispatcher.forward, JSP 
V
    Опции темы
Molodec
Дата 23.8.2011, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 249
Регистрация: 20.12.2010
Где: Украина

Репутация: 1
Всего: 1



Добрый день, господа.
Такая проблема. Раньше подтверждал форму через method="post" action="...".. (Кнопка submit)
Теперь немного разобрался в Ajax и пытаюсь в случае правильности ввода перенаправить пользователя на другую страничку... Так вот, так как я делал раньше уже не получается... 
Ничего не происходит. А перенаправление в JS писать не хочется... Как то это не очень логично. Если для той странички требуется логин и пароль, показывать ее адрес, хоть на ней и стоит защита при открытии. 
Раньше у меня был класс, от которого я наследовал все свои сервлеты:
Код

package guestbook.servlet;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class Dispatcher extends HttpServlet {

    protected void forward(String address, HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(address);
        dispatcher.forward(request, response);
    }
}

Теперь же в сервлетах можно было написать:
Код

this.forward("/pages/index.jsp", request, response);

И мы уже перескакивали на эту страничку. 
Но вот сейчас этот метод отрабатывает без исключений.. Но.. На этом все и заканчивается. Переход никуда не осуществляется. 
То же самое и при response.sendRedirect().
Ajax организую с помощью jQuery.
В отладчике просматриваю. Все отрабатывает. Единственное - страница не перенаправляется.
С чем это связано и какие есть решения? 

Это сообщение отредактировал(а) Molodec - 27.8.2011, 09:13
PM MAIL   Вверх
Gretchen
Дата 24.8.2011, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 25.8.2004
Где: München

Репутация: 2
Всего: 4



Привет. Если ты работаешь с AJAX, то request посылает уже не браузер напрямую, а JavaScript XHR объект. И response, который твой сервер послал получит не браузер, а этот Javascript объект. Ты этот response потом как текст или XML можешь прочесть в callback ( это третий аргумент метода JQuery.post() ) как аргумент функции. Потом ты с этим ответом можешь делать что хочешь, например увидеть как alert(data) или вставить внутри страницы в <div>. Я почти уверенна, что ты как response получаешь новую html-страницу. Так что напрямую через AJAX сделать redirect невозможно.  AJAX обычно и используют, чтобы минимизировать перегрузку страницы. 

Либо надо всётаки пользоваться Javascript так
Код

window.location.href = 'pages/next.jsp'


либо перегружать через Javascript только куски страницы. Может можно заменить и содержимое тега <body>, но я никогда такое не пробовала

Можно попробовать сделать так: 

создать сервлет, который в зависимости от параметра в request,  решает какая страница вызывается и делает forward

Код


public class RedirectServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String adress = request.getParameter("adress");
        RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(address);
        dispatcher.forward(request, response);
    }

    protected doPost(HttpServletRequest request, HttpServletResponse response) {
         doGet(request, response);
    }
}



 и в JavaScript
Код

window.location.href = 'RedirectServlet?adress=next.jsp' // здесь чисто условно, чтобы объяснить что вызывать и с каким параметром



Попробуй ещё обратится в раздел JavaScript здесь на форуме. Может там тебе подскажут более элегантное решение


P.S. В FireFox есть отличный плагин для работы с JavaScript и в частности с AJAX. Установив его, ты сможешь видеть, что ты посылаешь серверу и что он присылает в ответ.

PM MAIL ICQ   Вверх
Molodec
Дата 25.8.2011, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 249
Регистрация: 20.12.2010
Где: Украина

Репутация: 1
Всего: 1



Gretchen, спасибо за советы. 
Попытался через alert вывести ответ сервера при forward - alert не отработал. 
Код

jQuery.post("MessUnit","type=add&message="+jQuery("#add_message").val(),function(data) {
            alert(data)
            update();
        }
        );

Видимо там возникает куча других исключительных ситуаций. 

Хотелось конечно, но не получилось возложить это на сервер. В итоге воспользовался, как ты и сказала:
Код

window.location.href = 'pages/next.jsp'

Это пока что. Думаю, найти плагин:
P.S. В FireFox есть отличный плагин для работы с JavaScript и в частности с AJAX. Установив его, ты сможешь видеть, что ты посылаешь серверу и что он присылает в ответ.
и отследить. Может что и смогу исправить. 
В любом случае спасибо за информативный ответ. Будет где разгуляться. 


P.S.
Почему Ajax и перезагрузка страницы - потому что при вводе данных выполняется многократные проверки со стороны сервера. Перезагрузка для них - не уместна. А вот когда они выполняется и все дадут положительный ответ. Вот тогда и можно перезагружать страничку)) 
PM MAIL   Вверх
Gretchen
Дата 25.8.2011, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 25.8.2004
Где: München

Репутация: 2
Всего: 4



Прости пожалуста. Только сейчас поняла, что забыла написать имя плагина. Это FireBug. Это практически стандарт для JavaScript программистов
PM MAIL ICQ   Вверх
Molodec
Дата 26.8.2011, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 249
Регистрация: 20.12.2010
Где: Украина

Репутация: 1
Всего: 1



Знаю его)) 
Обычно пользуюсь, Dragon fly, но и с тем сталкивался. Только вот проблема... FireFox видимо считает Ajax запросы не безопасными и блокирует. Поэтому у меня на нём совсем Ajax на localhost не работает... Можно как то это исправить?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0754 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.