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});
}
我正在编写一个简单的购物车,但我不知道该怎么做:
这是 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});
}