首页
学习
活动
专区
圈层
工具
发布

通过Ajax调用使用Struts 2的HTTP数组参数

通过Ajax调用使用Struts 2的HTTP数组参数

基础概念

在Struts 2框架中,通过Ajax调用传递数组参数是一种常见的需求,特别是在需要批量处理数据时。Struts 2提供了多种方式来处理HTTP请求中的数组参数。

实现方式

1. 前端Ajax调用示例

使用jQuery进行Ajax调用传递数组参数的示例:

代码语言:txt
复制
$.ajax({
    url: 'yourAction.action',
    type: 'POST',
    data: {
        'arrayParam': ['value1', 'value2', 'value3'],
        'arrayParam2': [1, 2, 3]
    },
    traditional: true,  // 必须设置为true才能正确传递数组
    success: function(response) {
        console.log(response);
    }
});

2. Struts 2 Action类接收数组参数

在Struts 2的Action类中,可以通过以下方式接收数组参数:

代码语言:txt
复制
public class YourAction extends ActionSupport {
    private String[] arrayParam;
    private int[] arrayParam2;
    
    // 必须提供setter方法
    public void setArrayParam(String[] arrayParam) {
        this.arrayParam = arrayParam;
    }
    
    public void setArrayParam2(int[] arrayParam2) {
        this.arrayParam2 = arrayParam2;
    }
    
    public String execute() {
        // 处理数组参数
        for(String param : arrayParam) {
            System.out.println(param);
        }
        return SUCCESS;
    }
}

3. 使用List接收参数

也可以使用List来接收数组参数:

代码语言:txt
复制
private List<String> listParam;

public void setListParam(List<String> listParam) {
    this.listParam = listParam;
}

常见问题及解决方案

问题1:数组参数接收为null

原因

  • 前端没有正确传递数组格式
  • 没有设置traditional: true参数
  • Action类中没有提供对应的setter方法

解决方案

  1. 确保前端传递的参数名与Action中的属性名一致
  2. 在jQuery Ajax调用中设置traditional: true
  3. 检查Action类中是否有对应的setter方法

问题2:数组索引不连续

原因: Struts 2默认期望数组参数是连续索引的,如arrayParam[0], arrayParam[1]

解决方案

  1. 使用traditional: true参数
  2. 或者在前端构造参数时确保索引连续

问题3:复杂对象数组

如果需要传递复杂对象数组:

代码语言:txt
复制
// 前端
$.ajax({
    url: 'complexAction.action',
    type: 'POST',
    traditional: true,
    data: {
        'users[0].name': 'John',
        'users[0].age': 30,
        'users[1].name': 'Jane',
        'users[1].age': 25
    },
    success: function(response) {
        console.log(response);
    }
});
代码语言:txt
复制
// 后端
public class ComplexAction extends ActionSupport {
    private List<User> users;
    
    public static class User {
        private String name;
        private int age;
        // getters and setters
    }
    
    public void setUsers(List<User> users) {
        this.users = users;
    }
    // ...
}

最佳实践

  1. 始终在前端设置traditional: true参数
  2. 保持前后端参数命名一致
  3. 对于复杂数据结构,考虑使用JSON格式传递
  4. 在Action类中提供完整的setter方法
  5. 考虑使用Struts 2的JSON插件简化Ajax交互

应用场景

  • 批量删除操作(传递ID数组)
  • 表单中多选框数据处理
  • 表格数据的批量保存
  • 多条件筛选查询

通过正确配置和使用,Struts 2可以很好地处理Ajax调用中的数组参数,满足各种业务场景需求。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

什么是jQuery?

目的:通过九类选择器,能定位web页面(HTML/JSP/XML)中的任何标签 (1)基本选择器 直接定位id、类修修饰器、标签 (2)层次选择器 有父子,兄弟关系的标签 (3)增强基本选择器 大于、小于...我们来使用这个方法来获取当前的时间,对这个方法熟悉一下: 调用load方法的jquery对象,返回结果自动添加到jQuery对象代表的标签中间 如果带参数就自动使用post,不带参数自动使用get。...这次我使用Jquery+Struts2+JSON来实现二级联动。..."http://struts.apache.org/dtds/struts-2.3.dtd"> struts> 使用Jquery对象来调用,因此需要手动把结果放在想要放的位置 post()方法是用来把参数带过去给服务器的,因此我们需要在Servlet上手动设置编码。

3.6K70
  • bootstrap-typeahead 自动补全简单的使用教程

    1、bootstrap-typeahead 自动补全简单的使用教程,自动补全,使用起来看似很厉害的样子,同事使用的select2,我们老总建议我用的是typehead,发现typehead...案例四,是使用ajax从后台查询出的数据,这个自己摸索的格外头疼,一开始不知道source方法的query参数如何传递进行的,其实使用案例四的格式以后, 就将query的数据传递进去了,不用其他操作或者定义变量...其中alias是自己传递到action的变量,由于公司使用的是struts,所以呢,自己使用模型驱动还是属性驱动,或者其他框架,自己看事哈。...147 //如果你希望通过 Ajax 调用从服务器端获取匹配的数据,那么,在异步完成的处理函数中, 148 //你需要获取一个匹配的字符串数组...,然后,将这个数组作为参数,调用 process 函数。

    2K30

    struts2实现ajax校验的2种方法

    需要在Action里通过ServletActionContext的静态方法,获取到PrintWriter,然后直接写入响应  这里的originAjax()方法的返回值类型是void,然后在struts.xml...其次是这个Action没有办法自动从请求中将json串解析为java的域,同样,如果需要将json串写入响应的话,也需要自行编码  另一个办法,是使用struts2-json-plugin,将jar包拷贝入...本文就不详细介绍了,可以看另外一篇博客:http://unmi.cc/struts2-json-plugin-guide,或者直接看官方的文档  此外,因为这种响应ajax请求的方法,是需要放在json-default...所以struts2-json-plugin作为一个插件,是补充了struts2不能原生支持json的不足,将json格式作为数据交换的格式,这个设计是很合理的。 ...但是struts2自身对ajax的支持就太不好了,比如我想在Action的一个方法里,直接输出一段普通文本来响应ajax请求,居然还要通过HttpServletResponse来做。

    92790

    AJAX入门这一篇就够了

    readyState一改变,回调函数被调用,它有5个状态 0:未初始化 1:open方法成功调用以后 2:服务器已经应答客户端的请求 3:交互中。...如果是get方式,Tomcat下,使用ISO8859-1编码得到原本的二进制数组,再使用UTF-8编码便可以解决 接下来,要介绍的是:我们可以屏蔽任何浏览器和任何服务器的编码格式,浏览器发送给服务器的数据不造成乱码问题...省份-城市-区域三级联动【Struts2 + JSON版】 ---- 分析 与上次是一样的,只不过这次换了用JSON,使用Action控制罢了... 监听下拉框的变动,使用异步对象与服务器进行交互。...使用Struts2提供的组件把数据封装成JSON 返回给浏览器 ---- 监听省份JSP页面 <%-- Created by IntelliJ IDEA....能够把Action的数据封装成JSON,就需要导入Struts2的开发包 struts2-json-plugin-2.3.4.1.jar ?

    5.1K91

    SpringMVC知识一锅烩

    可以是数组 method : 可以设置表单提交方式(post/get) 如果表单不符合,就会出现异常,可以是数组 可以添加在类上面,类似struts2的namespace 则下面的方法都需要有类上父路径才能访问.../item/itemlist.action' // 默认 void : ajax 不返回视图 参数绑定 由于Controller是单例的,所以我们需要将参数封装到方法属性中 public String...: 数组 直接在形参传递数组,可以接受例如checkbox之类的多选的值 参数绑定 : list 只能使用包装类来提交,不能再形参直接传递list 前段用 itemList[0].name 作为name...preHandler返回为true的时候才调用 springMVC和Struts的区别 springMVC是单例, Struts2为多例 springMVC参数绑定在形参 , Struts2 绑定成员变量...springMVC没有值栈 Struts2 有值栈 springMVC的入口是一个Servlet, Struts2为一个Filter

    1.3K00

    Struts2 类型转换和数据校验

    Struts 2默认提供了四种主题,分别是simple、xhtml、css_xhtml和Ajax。 Ø simple主题:这是最简单的主题,是底层的结构。...{ //从arg1数组中获取用户输入的产品信息并使用逗号就行分割 String[] productValues = arg1[i].split(","); //从分割后的数组中获取id的值 String...Struts 2框架会在调用Action的业务方法之前调用validate()完成数据校验。 ​...Struts 2的校验顺序​ 通过上面的介绍我们可以了解到,在Struts 2框架下可以使用多种方式进行输入校验,这些校验并不是无序的,而是按照一定的顺序来执行的,顺序如下: (1)客户端校验,如果有的话...(2)对请求的字符串参数进行类型转换,并设置为对应的Action属性值。 (4)调用Action中的validateXxx方法进行校验。 (5)调用Action的validate方法进行校验。

    19810

    Struts2 类型转换和数据校验

    Struts 2默认提供了四种主题,分别是simple、xhtml、css_xhtml和Ajax。 Ø simple主题:这是最简单的主题,是底层的结构。...//从arg1数组中获取用户输入的产品信息并使用逗号就行分割 String[] productValues = arg1[i].split(","); //从分割后的数组中获取id的值 String id...Struts 2框架会在调用Action的业务方法之前调用validate()完成数据校验。...Struts 2的校验顺序 通过上面的介绍我们可以了解到,在Struts 2框架下可以使用多种方式进行输入校验,这些校验并不是无序的,而是按照一定的顺序来执行的,顺序如下: (1)客户端校验,如果有的话...(2)对请求的字符串参数进行类型转换,并设置为对应的Action属性值。 (4)调用Action中的validateXxx方法进行校验。 (5)调用Action的validate方法进行校验。

    18310

    struts2标签详解

    主题:使用文档生成主题 AJAX主题:基于AJAX实现的主题 通过在struts.properties文件中改变struts.ui.theme,struts.ui.templateDir,struts.ui.templateSuffix...标签是struts2专门提供的一组进行AJAX操作的标签,在使用这些标签之前,需要在JSP页面中添加如下引用: struts-dojo-tags...) Container通过web.xml映射请求,并获得控制器(Controller)的名字 (3) 容器(Container)调用控制器(StrutsPrepareAndExecuteFilter...在Struts2.1以前调用FilterDispatcher,Struts2.1以后调用StrutsPrepareAndExecuteFilter (4) 控制器(Controller)通过ActionMapper...struts使用它对表单进行验证 dwr-1.1.1.jar 1.1.1 dwr-1.1.1 Direct Web Remoting是一个WEB远程调用框架.Java开发利用这个框架可以让AJAX

    1.9K20

    (修订版)AJAX入门!

    :请求状态readyState一改变,回调函数被调用,它有5个状态 0:未初始化 1:open方法成功调用以后 2:服务器已经应答客户端的请求 3:交互中。...这是怎么做到的呢???其实就是通过AJAX来完成的。使用AJAX技术让我们看起来网页非常“智能”,会根据省份来给出对应的城市信息。 ?...省份-城市-区域三级联动【Struts2 + JSON版】 ---- 9.1分析 与上次是一样的,只不过这次换了用JSON,使用Action控制罢了… 监听下拉框的变动,使用异步对象与服务器进行交互。...,给出对应的数据 使用Struts2提供的组件把数据封装成JSON 返回给浏览器 ---- 9.2监听省份JSP页面 <%-- Created by IntelliJ IDEA....能够把Action的数据封装成JSON,就需要导入Struts2的开发包 struts2-json-plugin-2.3.4.1.jar ?

    1.6K11

    AJAX入门!

    :请求状态readyState一改变,回调函数被调用,它有5个状态 0:未初始化 1:open方法成功调用以后 2:服务器已经应答客户端的请求 3:交互中。...这是怎么做到的呢???其实就是通过AJAX来完成的。使用AJAX技术让我们看起来网页非常“智能”,会根据省份来给出对应的城市信息。 ?...省份-城市-区域三级联动【Struts2 + JSON版】 ---- 9.1分析 与上次是一样的,只不过这次换了用JSON,使用Action控制罢了… 监听下拉框的变动,使用异步对象与服务器进行交互。...,给出对应的数据 使用Struts2提供的组件把数据封装成JSON 返回给浏览器 ---- 9.2监听省份JSP页面 <%-- Created by IntelliJ IDEA....能够把Action的数据封装成JSON,就需要导入Struts2的开发包 struts2-json-plugin-2.3.4.1.jar ?

    1.8K20

    js书写原生ajax,JS 原生ajax写法

    : //设置请求的url参数,参数一是请求的类型,参数二是请求的url,参数三指定是否使用异步,默认是true xhr.open(“post”, “”, true); //post请求一定要添加请求头才行不然会报错...[使用XMLHttpRequest时,必须将html部署到web服务器中]1) 指定请求1.实例化eg: var http = new XMLHttpReque … Jquery学习笔记 –ajax...删除用户,使用了js原生ajax 主要复习了php的pdo数据库操作,和js的ajax,真麻烦,希望jquery的ajax简单点. index.php: 1 2 [代码]JS原生...音频格式兼容性 音频格式 Chrome Firefox IE9 Opera Safari MP3 支持 不支持 支持 不支持 支持 OGG 支持 支持 … struts2线程安全 struts2线程安全...2012-02-16 21:07:58 分类: 系统运维 问题:Struts 2 Action对象为每一个请求产生一个实例,因此没有线程安全问题.Spring的Ioc容器管理 … python学习第37

    17.3K40

    SpringMvc面试题

    讲下SpringMvc和Struts1,Struts2的比较的优势   性能上Struts1>SpringMvc>Struts2 开发速度上SpringMvc和Struts2差不多,比Struts1要高...讲下SpringMvc的核心入口类是什么,Struts1,Struts2的分别是什么   SpringMvc的是DispatchServlet,Struts1的是ActionServlet,Struts2...SpringMvc怎么和AJAX相互调用的   通过Jackson框架就可以把Java里面的对象直接转化成Js可以识别的Json对象 具体步骤如下 1.加入Jackson.jar 2.在配置文件中配置json...讲下SpringMvc的执行流程   系统启动的时候根据配置文件创建spring的容器, 首先是发送http请求到核心控制器disPatherServlet,spring容器通过映射器去寻找业务控制器,...使用适配器找到相应的业务类,在进业务类时进行数据封装,在封装前可能会涉及到类型转换,执行完业务类后使用ModelAndView进行视图转发,数据放在model中,用map传递数据进行页面显示。

    69620

    Struts2之—实现自己的结果集的定义ajax

    但看上面提出的问题并不难。情况非经常见,都知道使用ajax实现。可是怎样在struts中自己定义结果集来实现ajax——这是这篇博客的重点。 (注:servlet要么转发要么重定向。...struts2能够自己定义结果集) 转发、重定向、action2action都会使页面刷新,满足不了页面无刷新的需求,因此,能够自定义一个结果集来解决(通过此结果集把server端(action)的数据回调到...-- 配置Struts2的核心的过滤器 -->struts2org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter...();//页面载入时,调用初始化事件 二,执行 输入地址:http://localhost:8080/Struts2+AjaxResult/userAction_addUI.action,...下篇博客介绍——json类型的结果集——JSON插件是Struts2的Ajax插件,通过利用JSON插件,同意开发人员以很灵活的方式开发AJAX应用。 版权声明:本文博主原创文章。

    66620

    SSH框架(四) Spring、Spring MVC、Struts2优缺点整理

    这些参数在前台如何显示,并将页面上的一些控件适当使用Struts2提供的服务器端控件来代替,编写Action对应的方法来完成业务逻辑,最后,做一些与配置文件相关的设置。...2、 使用OGNL进行参数传递。...常用的Struts2的扩展可以通过这个链接找到: http://cwiki.apache.org/S2PLUGINS/home.html 6、 模块化 Struts2...而struts2框架是类级别的拦截,每次来了请求就创建一个Action,然后调用setter getter方法把request中的数据注入;struts2实际上是通过setter getter方法与request...spring3 mvc的方法之间基本上独立的,独享request response数据,请求数据通过参数获取,处理结果通过ModelMap交回给框架方法之间不共享变量,而struts2搞的就比较乱,虽然方法之间也是独立的

    1.2K20

    面试之SpringMVC

    7、 如果你也用过 struts2.简单介绍下 springMVC 和 struts2 的区别有哪些?...2) springmvc 是基于方法开发(一个 url 对应一个方法),请求参数传递到方法的形参,可以设计为单例或多例(建议单例),struts2 是基于类开发,传递参数是通过类的属性,只能设计为多例。...3) Struts 采用值栈存储请求和响应的数据,通过 OGNL 存取数据,springmvc 通过参数解析器是将 request 请求内容解析,并给方法形参赋值,将数据和视图封装成 ModelAndView...可以在类上面加上@SessionAttributes 注解,里面包含的字符串就是要放入 session 里面的 key 20、 SpringMvc 怎么和 AJAX 相互调用的?...系统启动的时候根据配置文件创建 spring 的容器, 首先是发送 http 请求到核心控制器 disPatherServlet,spring 容器通过映射器去寻找业务控制器,使用适配器找到相应的业务类

    89300
    领券