Struts2 没有结果的行动

Struts2 action without result

我正在编写一个简单的购物车,但我不知道该怎么做:

这是 jsp 的一部分:

<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>

它有一个 table,您可以在其中查看图书详细信息。在每一行中,有一个 link 买书。我用 and 对其进行了编码,并在 .

中传递了参数 with

问题是我不想转到另一个 jsp 页面。当您单击 link 时,它会触发一个操作(将图书添加到列表中)并在同一 jsp 页面底部的另一个 table 上显示该列表。 我该怎么做?

如果我在 xml 文件中写入没有结果的新操作,我会收到错误消息。 我写了一个新的 class,它不扩展 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>

Ajax 是解决方案。这里解释如何创建前端部分和后端部分。前端部分很简单...只是将元素添加到购物车,没有插入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 和 returns 所需 JSON 结果(例如,如果这本书仍然可用,或更新会话购物车...有关更多信息,请查看 official documentation 和 google 中的一些示例...

这里有一个例子:

struts.xml

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

SUCCESS 上的 CartAction 会自动将您所有的操作属性(带有 getter 和 setter 的属性)映射到可以详细说明的 JSON 对象中在 success ajax 函数中

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