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

时间: 2024-07-28 23:46:20

Struts2接收数组时需要注意的问题的相关文章

Struts2 接收多表关联的数据

今天在做一个计费移动的时候,使用Struts2 的modelDriver 接收User提交的数据,在User 中关联着用户详细信息表.电话信息表.套餐信息表和管理员信息表:提交上来的数据有电话号码.用户详细地址和个人信息.套餐的名称.套餐的类型等等... @Entity public class User { private int id; private String userName; private String password; private String type; private

new对象数组时的内存布局

[cpp] view plain copy #include <iostream> #include <limits> using namespace std; #define SAFE_DELETE(x) \ { \ if (NULL != (x)) \ { \ delete (x); \ (x) = NULL; \ } \ } #define SAFE_DELETE_ARY(x) \ { \ if (NULL != (x)) \ { \ delete[] (x); \ (x) 

遍历ArrayList数组时可能存在的问题

我们都知道ArrayList类中有个重要的方法是Add(),该方法用于向集合中添加元素,它有一个object类型的参数,表示通过该方法可以向集合中添加任意类型的项,由于ArrayList动态数组中的元素可以多样化,当使用foreach语句遍历ArrayList数组时,可能会给程序带来潜在的问题. 我们来讨论下,代码如下: class Program { //遍历arraylist出现的问题分析 static void Main(string[] args) { ArrayList arr = g

php 中遍历数组时使用引用出现的问题

今天在使用foreach遍历数组时发现,当使用&时会出现问题: $arr = array( array('id' => 100, 'error'=> 'aa'), array('id' => 101, 'error'=> 'bb'), ); foreach($arr as &$value) { if($value['id'] == 101) $value['error'] = 'test'; } var_dump($arr); foreach($arr as $va

springmvc 传递和接收数组参数

java url中如何传递数组,springMVC框架controller类如何接收数组参数? 下面介绍一下URL中传递数组参数方法: dd.do?titles[]=col1&titles[]=col2&titles[]=col3 或者使用ajax方式传递: var param = {titles:['col1','col2','col3']};  $.ajax({url:"dd.php", type:"post", data:param, asyn

spring mvc接收数组

(一)前言 对于springmvc接收数组的问题啊,我试验过几次,但是了有时候成功了,有时候失败了,也不知道为啥的,然后现在又要用到了,所以打算具体看看到底怎么回事,但是了我实验成功了顺便找了好多资料的. (二)spring mvc接收数组测试代码 @ResponseBody @RequestMapping(value = "/test/array", method = RequestMethod.POST) public JSON test(@RequestParam(value =

Yii框架中表单的name属性使用数组时

数组名最好与相应的model所应,比如有个叫BasicWord的model,前端表单中的name属性赋值的格式应类似这样: name="BasicWord[word_id]" 虽然有的时候不这样写也正确,但是最好这样写,因为今天在处理文件上传表单的时候,由于数组名与model名不同,导致致命错误. Yii框架中表单的name属性使用数组时

C# UdpClient使用Receive和BeginReceive接收消息时的不同写法

使用Receive(同步阻塞方式), 注意使用同步方法时,需要使用线程来开始方法,不然会使UI界面卡死 IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 5858); UdpClient udpClient = new UdpClient(RemoteIpEndPoint); while (true) //由于Receive方法是阻塞方法,一个Receive操作完了后才能继续往下执行,所以能在这里使用死循环 { Byte[]

JavaScript-//FOR/IN循环。当使用for/in循环遍历关联数组时,就可以清晰地体会到for/in的强大之处。

<script> //FOR/IN循环.当使用for/in循环遍历关联数组时,就可以清晰地体会到for/in的强大之处. function getvalue(portfolio){ var total=2.0; for(stock in portfolio){ //遍历portfolio中的每只股票 var shares=portfolio[stock]; //得到每只股票的份额 var proce=getQuery(stock); //查找股票价格 getQuery()查询部分 total+