Struts2和Ajax数据交互示例详解

yizhihongxing

下面我将详细讲解“Struts2和Ajax数据交互示例详解”的完整攻略,包含以下几个部分:

  1. 概述:介绍本文的主要内容和目标。
  2. 环境配置:介绍Struts2和Ajax数据交互的环境配置。
  3. 示例1:使用Struts2和Ajax实现表单提交,并异步显示提交结果。
  4. 示例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技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • 解决JAVA非对称加密不同系统加密结果不一致的问题

    为了解决JAVA非对称加密在不同系统中加密结果不一致的问题,我们需要在代码中指定加密算法的provider,这样可以使加密在不同系统中的表现一致。 下面是解决该问题的步骤: 确认加密算法的provider 我们需要明确加密算法的provider信息,以RSA算法为例,该算法的provider为BC(BouncyCastle)。 将provider添加进代码 …

    Java 2023年5月19日
    00
  • Java配置DBeaver的详细步骤

    以下是Java配置DBeaver的详细步骤: 步骤一:下载并安装DBeaver 1.前往DBeaver官网,下载对应操作系统的安装包。例如:Windows系统下载dbeaver-ce-x.y.z-x64-setup.exe。 2.双击exe文件,按照向导提示安装DBeaver。 步骤二:安装MySQL驱动 1.前往MySQL官网,下载对应版本的MySQL C…

    Java 2023年6月1日
    00
  • Spring MVC使用jstl 标签c:forEach 遍历输出双层嵌套List的数据方式

    在Spring MVC中使用JSTL的c:forEach标签遍历输出双层嵌套List的数据方式,可采用以下步骤: 1. 引入jstl标签库 要使用JSTL的标签,需要先引入JSTL的标签库。在Maven中可以通过下面的依赖引入: <dependency> <groupId>jstl</groupId> <artifa…

    Java 2023年6月15日
    00
  • jsp网页搜索结果中实现选中一行使其高亮

    要在jsp网页搜索结果中实现选中一行使其高亮,我们可以采用以下步骤: 添加CSS样式 我们需要添加一个CSS样式来定义高亮选中的样式,比如我们可以定义一个名为”selected”的样式: .selected { background-color: #ffffcc; } 编写Javascript代码 使用javascript代码,我们可以监听table中的tr…

    Java 2023年6月15日
    00
  • 使用Java实现简单的server/client回显功能的方法介绍

    首先,在Java中实现简单的server/client回显功能需要经过以下步骤: 创建ServerSocket并绑定端口号,等待客户端连接。 创建Socket对象并连接服务器。 使用输入输出流向客户端发送和接收数据。 在服务器端处理客户端发送的数据并将其回显给客户端。 下面详细介绍这些步骤。 一、创建ServerSocket并绑定端口号 在Java中,可以使…

    Java 2023年5月19日
    00
  • Springboot文件上传功能的实现

    在Spring Boot应用程序中,我们可以使用MultipartFile类和Spring的MultipartResolver接口来实现文件上传功能。在本文中,我们将介绍如何实现Spring Boot文件上传功能。 增加依赖 首先,我们需要在pom.xml文件中增加Spring Boot Web依赖。下面是一个示例: <dependency> &…

    Java 2023年5月18日
    00
  • Java 8 动态类型语言Lambda表达式实现原理解析

    Java 8 动态类型语言Lambda表达式实现原理解析 Lambda表达式的概念 Lambda表达式是Java 8中引入的一个重要的新特性,它是一种函数式编程的概念,允许我们将方法作为参数传递给另一个方法,同时还支持像匿名内部类一样定义函数,从而在代码中实现更加简洁和高效的函数式编程。 Lambda表达式的语法 Lambda表达式的语法非常简洁,由三个部分…

    Java 2023年5月26日
    00
  • SpringBoot中的Aop用法示例详解

    Spring Boot 中的 AOP 用法示例详解 什么是 AOP? AOP(Aspect Oriented Programming)即面向切面编程,是一种常见的编程范式。AOP 可以将一些常用的横切逻辑(比如日志、安全检查等)模块化,使得代码更具可读性、可维护性、可重用性。 Spring Boot 中的 AOP Spring Boot 框架提供了很好的 A…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部