问题:
我收到了一个由jsp发送的多维字符串数组,当我尝试获取该数组并将其设置为servlet中的变量时,我意识到控制器将多维字符串数组转换为一维字符串数组。我在jsp的console.log中打印了数组,只是为了确保数组包含字符串数组而不仅仅是字符串,chrome的日志显示一切正常,所以我想问题肯定出现在servlet的一侧。这不是错误,但不是我希望在我的应用程序中实现的行为。
以下是我遇到问题的代码:
基本上,当我将请求中的数组设置到servlet端的数组时,servlet所做的就像这样:
此外,我尝试寻找解决方案,并得到了一些答案和想法,比如添加 .clone(); 但是它给出了相同的结果。我知道有一个 string.Split 方法,但是我需要迭代数组来拆分每个字符串,然后将每个结果数组设置为字符串的多维数组,并且我觉得如果能够避免或解决主要问题,这样做是不必要的。
我做错了什么?有没有办法实现我想要的?有没有更好的方法来制作一个从 servlet 请求中获取的多维数组的精确副本?
提前非常感谢。
解决方案由 Bohemian 提供。
顺便说一句...这个解决方案的某些方法需要JDK 8或更高版本,而我使用的是1.7,所以我遇到了问题...
只需要将源代码的编译器版本更改为项目属性中的JDK 8即可解决此问题,但首先请检查您是否已经安装了JDK 8。
我收到了一个由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即可解决此问题,但首先请检查您是否已经安装了JDK 8。