2015-10-10 6 views
1

Я кодирование простой Корзинки, но я не знаю, как это сделать:Struts2 действие без результата

Это часть СПЯ:

<s:iterator value="#session.listaLibros" var="libro"> 
       <tr> 
        <td><s:property value="titulo"/></td> 
        <td><s:property value="autor"/></td> 
        <td><s:property value="precio"/></td> 
        <s:hidden name="isbn" value="%{idLibro}"/> 
        <td><s:url var="url" action="comprar"> 
          <s:param name="idLibro" value="isbn"/> 
         </s:url> 
         <s:a href="%{url}">Comprar</s:a></td> 
       </tr> 
      </s:iterator> 

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

Проблема в том, что я не хочу переходить на другую страницу jsp. Когда вы нажимаете на ссылку, она запускает действие (добавляет книгу в список) и показывает список в другой таблице внизу той же страницы jsp. Как я могу это сделать?

Если я пишу новое действие без результата в файле xml, я получаю ошибку. Я написал новый класс, который не расширяет ActionSupport, но также не работает. Я получаю пустую страницу.

//ActionClass 
public class Comprar { 
. 
. 
//Action method 
public void comprarLibro(){ 
.... 
} 

struts.xml

<!--Action for the ActionSupport action class--> 

<action name="comprarLibroAction" class="controller.ComprarLibroAction" method="comprarLibro"> 

    </action> 

    <!--Simple action class--> 
    <action name="comprar" class="controller.Comprar" method="comprarLibro"></action> 

ответ

0

Ajax является решением. Вот объяснение того, как создать переднюю часть и заднюю часть. Передняя часть очень проста ... Она просто добавляет элемент в корзину, никакой аякс-вызов не вставлен и количество не учитывается.

Передняя

$(document).ready(function() { 
 
    $('.buy').click(function() { 
 
    // retrieve book description 
 
    var bookId = $(this).attr('id'); 
 
    var description = $(this).parent().parent().find('.description').html(); 
 
    
 
    // HERE ADD THE AJAX CALL 
 
    // On success function use this code to add values to the cart 
 
    var tr = $('<tr />'); 
 
    var td = $('<td />', {id: bookId, html: description}); 
 
    
 
    $(tr).append(td); 
 
    
 
    $('#cart tbody').append(tr); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<table> 
 
    <thead> 
 
    <tr> 
 
     <th>Id</th> 
 
     <th>Title</th> 
 
     <th>Action</th> 
 
    </tr> 
 
    </thead> 
 
    <tbody> 
 
    <tr> 
 
     <td>1</td> 
 
     <td class="description">Asd Asd by Asd</td> 
 
     <td><button id="1" class="buy">Buy!</button></td> 
 
    </tr> 
 
    <tr> 
 
     <td>2</td> 
 
     <td class="description">Lol by Lol</td> 
 
     <td><button type="button" id="2" class="buy">Buy!</button></td> 
 
    </tr> 
 
    <tr> 
 
     <td>3</td> 
 
     <td class="description">Struts by Apache</td> 
 
     <td><button type="button" id="3" class="buy">Buy!</button></td> 
 
    </tr> 
 
    </tbody> 
 
</table> 
 

 
<table id="cart"> 
 
    <thead> 
 
    <tr> 
 
     <th>Cart</th> 
 
    </tr> 
 
    </thead> 
 
    <tbody> 
 
    </tbody> 
 
</table>

Назад конец

Для серверной части вы должны использовать плагин Struts2 JSON для того, чтобы настроить действие, которое может быть вызванный Ajax и возвращает желаемый результат JSON (например, если книга по-прежнему доступна или обновляет ses Sion корзину ... Для получения дополнительной информации посмотрите на official documentation и Google для некоторых примеров ...

вот пример:

struts.xml

<struts> 
    <package name="example" extends="json-default"> 
     <action name="JSONExample" class="example.JSONExample"> 
      <result type="json"/> 
     </action> 
    </package> 
</struts> 

CartAction на УСПЕХ автоматически сопоставляет все ваши атрибуты действия (те, что имеют геттер и сеттеры), в объект JSON, который может быть разработан внутри успеха ajax function

// Ajax call 
success: function(response) { 
    // ... 
    var tr = $('<tr />'); 
    var td = $('<td />', {id: bookId, html: description}); 
} 
+0

Thnak вы очень, @IIGala, но я пытаюсь сделать это без javascript. Есть ли другой способ сделать это? – Pedro

+0

Единственный, чтобы обновить ту же страницу при успешном действии ... Но может быть очень дорого .... Все, что пользователь покупает, должен обновить страницу? JQuery - это намного лучшее решение – IlGala

 Смежные вопросы

  • Нет связанных вопросов^_^