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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Struts 2 + JQuery Ajax, Не удается запустить Action 
:(
    Опции темы
Nikola661
Дата 12.4.2010, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Добре!!!
Пытаюсь использовать в своем приложении Struts 2 и JQuery Ajax.
Вот index.jsp:

Код

<script type=text/javascript src="<s:url value="/tiles/jquery.js"/>"></SCRIPT>
<script type=text/javascript>
$(document).ready(function(){
    $('#basis').change(
        function() {
         if ($('#offence option:selected').val()!='-1') {
             alert($('#basis option:selected').val() + '>' + $('#basis option:selected').text());
             $.ajax({
                 type:'POST',
                 url:'testAjax.action',
                 data:'offence='+$('#offence option:selected').val()+'&basis='+$('#basis option:selected').val(),
                 success: function(data) {
                     $('#regform').html(data);
                     alert('Success');
                 }
             });
         } else {
             alert('Не указан       .');
             $('#basis option:first').attr('selected','yes');
         }
        }
    );
});
</SCRIPT>

<form>
        <table class="wwTable" >
        <tr>
    <td class="tdLabel"><label for="offence" class="label">Селект1:</label></td>

    <td
><select name="offence" id="offence">
    <option value="-1"
    >-- Пожалуйста выберите --</option>
    <option value="1">.......</option>
    <option value="2">.......</option>
    <option value="3">.......</option>


</select>
</td>
</tr>

        <tr>
    <td class="tdLabel"><label for="basis" class="label">Селект2:</label></td>
    <td
><select name="basis" id="basis">
    <option value="-1"
    >-- Пожалуйста выберите --</option>
    <option value="1">...............</option>

    <option value="2">...............</option>
    ..............................................................
    <option value="10">..............</option>
</select>
</td>
</tr>

        </table>
        </form>
        <div id="regform"></div>


Возможно ли так в jquery, без jquery у меня получалось аяксить. Когда делаю так то работает:
Код

$.ajax({
                 type:'POST',
                 url:'regform.jsp',
                 data:'offence='+$('#offence option:selected').val()+'&basis='+$('#basis option:selected').val(),
                 success: function(data) {
                     $('#regform').html(data);
                     alert('Success');
                 }
             });


Но мне надо сначало выполнить Action!!! Спасибо???
PM MAIL   Вверх
Ares4322
Дата 12.4.2010, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



В доках по Struts2 пишут, что надо кастомайзить свой Action-класс для обработки AJAX. Но я сделал проще. Делаю простой сервлет, который обрабатывает AJAX(принимает запросы, парсит их и отправляет ответы), определяю в web.xml отображение запросов на этот сервлет(ну как простое программирование веба через сервлеты), а в struts.xml запрещаю обрабатывать запросы по данному url. И все работает. То есть AJAX запросы обрабатываются вне ACTION-классов, но, при этом, этот сервлет может пользоваться данными struts, например, объектами сессии.
PM MAIL   Вверх
Nikola661
Дата 13.4.2010, 04:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Ares4322 @ 12.4.2010,  13:43)
В доках по Struts2 пишут, что надо кастомайзить свой Action-класс для обработки AJAX. Но я сделал проще. 

Тоже вариант, но прикол в том что раньше я делал так (взято с форума http://www.linkexchanger.su/forum/viewtopi...mp;p=2297#p2297 чтобы только показать суть):
Код

function getXmlHttp(){
  var xmlhttp;
  try {
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
    try {
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (E) {
      xmlhttp = false;
    }
  }
  if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
    xmlhttp = new XMLHttpRequest();
  }
  return xmlhttp;
}

var xmlhttp = getXmlHttp()
xmlhttp.open('GET', 'http://www.site.ru/love/', true); // <---- адрес страницы, откуда берем данные
xmlhttp.onreadystatechange = function() {
  
if (xmlhttp.readyState == 4) {
     if(xmlhttp.status == 200) {
        dataLoaded(xmlhttp.responseText);
     }
     else {
        alert("Error " + xmlhttp.status + ": " + xmlhttp.statusText);    
    }
  }
};
xmlhttp.send(null);


И все работало! Тут естественно в url писал так http://localhost:8080/MyApp/testAjax.do
Action возвращал мне HTML и я всовывал его в какой-нибудь тег:
Код

getElementById('nnnn').innerHTML(xmlhttp.responseText);


Через эту конструкцию не работает:
Код

$.ajax({
                 type:'POST',
                 url:'testAjax.action',
                 data:'offence='+$('#offence option:selected').val()+'&basis='+$('#basis option:selected').val(),
                 success: function(data) {
                     $('#regform').html(data);
                     alert('Success');
                 }
             });



А вот так прокатило:

Код

$.post('testAjax.action','',function(data){
                                            $('#regform').html(data);
                                        },'html');


вернул страницу!!! Хотя на api.jquery.com написано, что должно пахать. Попробовал использовать другие собития, а именно error и beforeSend:
Код

$.ajax({
                 type:'POST',
                 url:'testAjax.action',
                 data:'offence='+$('#offence option:selected').val()+'&basis='+$('#basis option:selected').val(),
                 error: function(xhr, ajaxOptions, thrownError) {
                     alert(xhr.responseText);
                 },
                 success: function(data) {
                     $('#regform').html(data);
                     alert('Success');
                 }
             });



Вот что он мне написал:
Error 404: No result defined for action ru.tester.action.TestAjaxAction and result input

PM MAIL   Вверх
Ares4322
Дата 13.4.2010, 08:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Описание этой ошибки означает, что Ваши данные не прошли валидацию, а struts не может найти перенаправление для Result-типа input. Вы делаете валидацию ( с помощью файла или метода)?
PM MAIL   Вверх
Nikola661
Дата 13.4.2010, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Не внимательно читал док!!!
Я неправильно засылал параметры запроса.
Код

$.ajax({
    data:'offence='+$('#offence option:selected').val()+'&basis='+$('#basis option:selected').val(),           
});


Это не правильно!!!Надо вроде так:
Код

$.ajax({
      data:({offence: [$('#offence option:selected').val()], 
                  basis: [$('#offence option:selected').val()]              
               })
});


,но почему то в севрлете они null.
Код

System.out.println(request.getParameter("offence")); //дает null

Тут написано: smile
http://api.jquery.com/jQuery.ajax/ 



Это сообщение отредактировал(а) Nikola661 - 14.4.2010, 02:49
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

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


 




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


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

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