• Struts2接收数组时需要注意的问题


    当表单中存在数组时(假定依次输入了1,2,3):

    <form>

        <input type="text" name="param"/>

        <input type="text" name="param"/>

        <input type="text" name="param">

        <input type="submit"/>

    </form>

    表单提交传递的字符串为:param=1&param=2&param=3

     

    传统的Servlet只能接收数组中第一个参数。

    publicclass ServletA extends HttpServlet {

        publicvoid doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

           System.out.println(request.getParameter("param"));

        }

    }

    Struts2则能接收多个参数并自动填充数组。

    publicclass A {

        private String param[];

        public String[] getParam() {

           returnparam;

        }

        publicvoid setParam(String[] param) {

           this.param = param;

        }

        publicvoid execute(){

           for(int i=0;i<this.param.length;i++){

               System.out.println(this.param[i]);

           }

        }

    }

     

    有时候HTML代码也会这样写:

    <form>

        <input type="text" name="param[0]"/>

        <input type="text" name="param[1]"/>

        <input type="text" name="param[2]">

        <input type="submit"/>

    </form>

    然而,此时Struts2则会抛出空指针异常。

    事实上第一种方式Struts2只接收了一个参数,参数的值为1,2,3Struts2将接收到的参数依照Action中定义的类型自动转换成了长度为3的字符串数组

    而第二种方式Struts2则接收了三个参数,参数值分别为123,这三个参数是依次接收的,在尚未接收完之前Struts2并不能得到数组的长度,因而不能创建数组

    要想使得此种方式下Struts2依旧能工作就要手动为数组赋值:

    private String param[] = new String[3];

     

    另外,有时也会使用jQuery进行ajax请求:

    $.ajax({

               data:{param:[1,2,3]},

               url:"a"

           });

    结果Struts2后台竟然抛出异常了,调试发现jQuery进行请求时发送的数据为:param%5B%5D=1&param%5B%5D=2&param%5B%5D=3

    经过解析后也就是:param[]=1&param[]=2&param[]=3

    这是jQuery专为适配phpPython框架而自动增加的内容,然而Struts2并不支持

    为了确保jQuery ajax请求的参数能被Struts2框架识别,jQuery代码应该这样写:

    $.ajax({

               data:{param:[1,2,3]},

               traditional:true,

               url:"a"

            });

    此时的发送的数据就是传统的:param=1&param=2&param=3

  • 相关阅读:
    前端性能优化
    技术从业者的未来(二)
    微服务架构
    SpringCloud 微服务最佳开发实践
    架构师之路
    SpringBoot开发秘籍
    架构设计方法论
    消息架构的设计难题以及应对之道
    SpringCloud 中如何防止绕过网关请求后端服务?
    微服务架构授权是在网关做还是在微服务做?
  • 原文地址:https://www.cnblogs.com/adam-tp/p/4873515.html
Copyright © 2020-2023  润新知