[英]How to avoid servlet converting a multidimensional array of string into one-dimensional array of strings?
题
我得到了一个从jsp发送的多维字符串数组,当我尝试获取数组并将其设置为servlet中的变量时,我意识到控制器将多维数组字符串转换为一维字符串数组,我打印数组在jsp一侧的console.log中只是为了确保数组包含字符串数组而不仅仅是字符串,并且chrome的日志显示它一切正常,所以我想这个问题必须在servlet的一边。 这不是错误,但不是我期望在我的应用程序中我想要实现的行为。
这是我遇到的代码:
String[] arrayCompra = request.getParameterValues("arraycompra[]");
所以基本上当我将数组从请求设置为servlet端的数据时,servlet正在做什么是这样的:
String[][] array = { {"a","b","c"} , {"d","e","f"} };
进入:
String[] array = {"a,b,c", "d,e,f"};
此外,我搜索了一个解决方案,并得到了一些答案和想法,如添加.clone(); 但它给了我相同的结果。 我知道有一个string.Split方法,但我必须在数组中迭代以拆分每个字符串,然后将每个结果数组设置为多维数组的字符串,我发现如果我可以避免或解决主要问题就没有必要。
我究竟做错了什么? 有没有办法实现我想要的? 有没有更好的方法来制作我在servlet中请求的多维数组的精确副本?
非常感谢提前。
Bohemian的 解决方案
String[][] arrayCompra = Arrays.stream(request.getParameterValues("arraycompra[]")).map(s -> s.split(",")).toArray(String[][]::new);
顺便说一句......这个解决方案的一些方法需要JDK 8或更高版本而我使用的是1.7所以我面对...
lambda expressions are not supported in -source 1.7
(use -source 8 or higher to enable lambda expressions)
要解决此问题,只需将源代码的编译器版本更改为项目属性到JDK 8,但首先要检查是否已经安装了一个。
这里是一个将CSV数组转换为2D数组的单线程,而不是对抗框架:
String[][] arrayCompra = Arrays.stream(request.getParameterValues("arraycompra[]"))
.map(s -> s.split(","))
.toArray(String[][]::new);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.