我正在编写一个简单的购物车,但我不知道该怎么做:
这是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>
答案 0 :(得分:0)
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);
});
});
&#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;
后端
对于后端部分,您必须使用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});
}