Struts2动作没有结果

时间:2015-10-10 00:03:19

标签: struts2 actionresult

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

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

它有一个表格,您可以在其中查看图书详细信息。在每一行中都有一个购买该书的链接。我用和编码了它,并且我将参数传递给。

问题是我不想去另一个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>

1 个答案:

答案 0 :(得分:0)

Ajax是解决方案。以下是如何创建前端部分和后端部分的说明。前端部分非常简单......它只是将元素添加到购物车,没有插入ajax调用,也不考虑数量。

前端

&#13;
&#13;
$(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);
  });
});
&#13;
<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>
&#13;
&#13;
&#13;

后端

对于后端部分,您必须使用Struts2 JSON插件才能设置可由Ajax调用的操作并返回所需的JSON结果(例如,如果该书仍然可用,或更新会话购物车..有关更多信息,请查看official documentation和谷歌的一些示例...

这是一个例子:

<强> 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对象中,该对象可以在成功 ajax函数中详细说明/ p>

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