zoukankan      html  css  js  c++  java
  • 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,3,Struts2将接收到的参数依照Action中定义的类型自动转换成了长度为3的字符串数组

    而第二种方式Struts2则接收了三个参数,参数值分别为1、2、3,这三个参数是依次接收的,在尚未接收完之前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专为适配php和Python框架而自动增加的内容,然而Struts2并不支持

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

    $.ajax({

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

               traditional:true,

               url:"a"

            });

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

  • 相关阅读:
    C#中的json操作
    Webdriver 怎么操作 scrollbar 下拉框
    jQuery 选择器
    BUYING FEED (第三届省赛)
    AMAZING AUCTION (第三届省赛)
    聪明的“KK” (第三届省赛)
    网络的可靠性 (第三届省赛)
    如何通俗理解——>集群、负载均衡、分布式
    常用的shell命令
    javascript实现原生ajax
  • 原文地址:https://www.cnblogs.com/chenny3/p/10226214.html
Copyright © 2011-2022 走看看