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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值