下面我将详细讲解“Struts2和Ajax数据交互示例详解”的完整攻略,包含以下几个部分:
- 概述:介绍本文的主要内容和目标。
- 环境配置:介绍Struts2和Ajax数据交互的环境配置。
- 示例1:使用Struts2和Ajax实现表单提交,并异步显示提交结果。
- 示例2:使用Struts2和Ajax实现无刷新分页查询。
1. 概述
本文将介绍如何实现 Struts2 和 Ajax 的数据交互。通过两个示例,分别演示使用 Struts2 和 Ajax 实现表单提交和无刷新分页查询的过程,帮助读者深入理解 Struts2 和 Ajax 的使用。
2. 环境配置
要使用 Struts2 和 Ajax,需要在项目中添加相应的依赖。在项目的 pom.xml 文件中添加如下代码:
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.5.10.1</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-json-plugin</artifactId>
<version>2.5.10.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.6.7</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.6.7.1</version>
</dependency>
3. 示例1
3.1 实现表单提交
接下来我们将通过一个示例来演示如何使用 Struts2 和 Ajax 实现表单提交。首先,我们创建一个表单页面(form.jsp),并使用 jQuery 实现 Ajax 提交:
<form id="form">
<label for="name">姓名:</label>
<input type="text" id="name" name="name" /><br>
<label for="age">年龄:</label>
<input type="text" id="age" name="age" /><br>
<input type="button" value="提交" onclick="submitForm();">
</form>
<div id="result"></div>
<script>
function submitForm() {
$.ajax({
url: "submit.action",
type: "post",
dataType: "json",
data: $("#form").serialize(),
success: function (data) {
$("#result").html(data.message);
}
});
}
</script>
该页面包含一个简单的表单,其中姓名和年龄是两个必填字段。点击提交按钮时,将通过 Ajax 提交表单数据,并将结果显示在 id 为 result 的 div 中。
3.2 Struts2 配置
接下来我们需要在 Struts2 中配置 Action 和返回的结果类型。在 struts.xml 中添加如下代码:
<action name="submit" class="com.example.action.SubmitAction">
<result name="success" type="json">
<param name="root">data</param>
</result>
</action>
其中,submit 是 Action 名称,SubmitAction 是 Action 类名。结果类型为 json,data 是返回的 Json 数据内容。
3.3 SubmitAction 类
Action 类的代码如下所示:
package com.example.action;
import com.opensymphony.xwork2.ActionSupport;
public class SubmitAction extends ActionSupport {
private String name;
private int age;
private String message;
@Override
public String execute() throws Exception {
if (name.length() == 0 || age == 0) {
message = "姓名和年龄不能为空";
} else {
message = "提交成功";
}
return SUCCESS;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
该类继承了 Struts2 的 ActionSupport 类,并定义了表单中提供的三个属性:姓名、年龄和结果消息。被提交的本文中表单数据将通过 setName 和 setAge 方法设置到 Action 对象中,结果消息将通过 getMessage 方法返回给客户端。
4. 示例2
4.1 分页查询页面
接下来,我们演示如何通过 Struts2 和 Ajax 实现无刷新分页查询。首先,我们需要创建一个包含分页查询的页面(list.jsp)。该页面包含一个表格和一些与分页相关的按钮:
<table id="table">
<thead>
<tr>
<th>#</th>
<th>姓名</th>
<th>年龄</th>
</tr>
</thead>
<tbody>
<tr><td colspan="3">加载中...</td></tr>
</tbody>
</table>
<div id="navigator">
<button id="first"><< 第一页</button>
<button id="prev">< 前一页</button>
<span id="page-info">第1页,共1页</span>
<button id="next">下一页 ></button>
<button id="last">最后一页 >></button>
</div>
<script>
$(function() {
loadData(1);
});
$("#first").click(function() {
loadData(1);
});
$("#prev").click(function() {
var current = parseInt($("#page-info").text().substring(1));
loadData(current - 1);
});
$("#next").click(function() {
var current = parseInt($("#page-info").text().substring(1));
loadData(current + 1);
});
$("#last").click(function() {
var total = parseInt($("#page-info").text().substring(4));
loadData(total);
});
function loadData(page) {
$.ajax({
url: "load.action",
type: "post",
dataType: "json",
data: {page: page},
success: function(data) {
var tbody = $("#table tbody");
var html = "";
$.each(data.data, function(index, item) {
html += "<tr><td>" + item.id + "</td><td>" + item.name + "</td><td>" + item.age + "</td></tr>";
});
tbody.html(html);
var pageInfo = "第" + data.page + "页,共" + data.total + "页";
$("#page-info").text(pageInfo);
if (data.page == 1) {
$("#first, #prev").prop("disabled", true);
} else {
$("#first, #prev").prop("disabled", false);
}
if (data.page == data.total) {
$("#next, #last").prop("disabled", true);
} else {
$("#next, #last").prop("disabled", false);
}
}
});
}
</script>
4.2 Struts2 配置
接下来,我们需要在 Struts2 中配置 Action 和返回的结果类型。在 struts.xml 中添加如下代码:
<action name="load" class="com.example.action.LoadAction">
<result name="success" type="json">
<param name="root">data</param>
</result>
</action>
其中,load 是 Action 名称,LoadAction 是 Action 类名。结果类型为 json,data 是返回的 Json 数据内容。
4.3 LoadAction 类
Action 类的代码实现了通过分页查询来返回 Json 的操作:
package com.example.action;
import java.util.ArrayList;
import java.util.List;
import com.opensymphony.xwork2.ActionSupport;
public class LoadAction extends ActionSupport {
private int page;
private List<Data> data = new ArrayList<Data>();
private int total;
@Override
public String execute() throws Exception {
total = 5;
int start = (page - 1) * 3;
int end = start + 3;
for (int i = start; i < end; i++) {
data.add(new Data(i, "test" + i, 20 + i));
}
return SUCCESS;
}
public static class Data {
private int id;
private String name;
private int age;
public Data(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
public List<Data> getData() {
return data;
}
public int getTotal() {
return total;
}
}
该类中定义了一个代表表格中每一行数据的 Data 类,还有 page 属性、data 属性和 total 属性。execute() 方法实现了通过分页查询返回 Json 数据的操作。
到此,我们已经完成了使用 Struts2 和 Ajax 实现表单提交和无刷新分页查询的示例。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Struts2和Ajax数据交互示例详解 - Python技术站