STRUTS2重复传参问题

时间:2021-09-16 17:24:56
前一阵子,由于struts漏洞,项目组*升级了struts2
升级后暴露出挺奇怪的一个问题

jsp页面表单里有name="obj.var" value="123"的input域
在提交表单时action="/xxx.do?obj.var=123"
这样,在后台通过getter方法获取到的obj.getVar()的值是"123, 123"
这应该是url拼接的参数和表单提交的参数重复导致的

但是这段代码并没有改过,在未升级前(2.0.6)是能正确获取到obj.getVar()的值是"123"的
而升级到之后(2.3.15.1)获取到的就是"123, 123"

有高手来帮忙解释一下这个现象么?
先行谢过 STRUTS2重复传参问题

8 个解决方案

#1


你获取的是“123,123”还是【“123”,“123”】如果是后一种,你可以试试用索引去取一下,取一个就可以了

#2


引用 1 楼 u011431550 的回复:
你获取的是“123,123”还是【“123”,“123”】如果是后一种,你可以试试用索引去取一下,取一个就可以了

obj对象里面的var是String类型,所以取到的是"123, 123"

重点是以前使用struts2.0.6的时候,取到的是"123" 
升级到struts2.3.15.1之后,取到的就是"123, 123"了

#3


引用 2 楼 black_ljz 的回复:
Quote: 引用 1 楼 u011431550 的回复:

你获取的是“123,123”还是【“123”,“123”】如果是后一种,你可以试试用索引去取一下,取一个就可以了

obj对象里面的var是String类型,所以取到的是"123, 123"

重点是以前使用struts2.0.6的时候,取到的是"123" 
升级到struts2.3.15.1之后,取到的就是"123, 123"了

是不是你的表单域中有两个‘obj.var’;在struts2的任何版本中,如果表单域中包含两个相同的对象的时候struts会自动封装成item形式。

#4


引用 3 楼 u011128470 的回复:
Quote: 引用 2 楼 black_ljz 的回复:

Quote: 引用 1 楼 u011431550 的回复:

你获取的是“123,123”还是【“123”,“123”】如果是后一种,你可以试试用索引去取一下,取一个就可以了

obj对象里面的var是String类型,所以取到的是"123, 123"

重点是以前使用struts2.0.6的时候,取到的是"123" 
升级到struts2.3.15.1之后,取到的就是"123, 123"了

是不是你的表单域中有两个‘obj.var’;在struts2的任何版本中,如果表单域中包含两个相同的对象的时候struts会自动封装成item形式。

如果是表单form里面有两个域,则无论是2.0.6还是2.3.15.1都会封装成"123, 123",这个没什么问题

现在的情况是表单form里面有一个"obj.var",在拼接请求url的时候又拼了一个"obj.var=123"
这样在2.0.6和2.3.15.1两个版本就出现了截然不同的两种情况:"123"和"123, 123"
这是为啥呢?

#5


页面估计有id相同的input输入框

#6


引用 5 楼 liuyuhua0066 的回复:
页面估计有id相同的input输入框

jsp:
<input id="obj.var" name="obj.var" value="123">

js:
fm.action="xxx.do?obj.var=123";
fm.submit();


这样obj.var既存在于表单里也存在于url里
在struts2.0.6,后台获取的就是"123"
在struts2.3.15.1,后台获取的就是"123, 123"
STRUTS2重复传参问题

#7


引用 6 楼 black_ljz 的回复:
Quote: 引用 5 楼 liuyuhua0066 的回复:

页面估计有id相同的input输入框

jsp:
<input id="obj.var" name="obj.var" value="123">

js:
fm.action="xxx.do?obj.var=123";
fm.submit();


这样obj.var既存在于表单里也存在于url里
在struts2.0.6,后台获取的就是"123"
在struts2.3.15.1,后台获取的就是"123, 123"
STRUTS2重复传参问题

确实是的,你这样会存在封装item形式的,二者取其一吧,

#8


该回复于2013-08-29 12:45:34被管理员删除

#1


你获取的是“123,123”还是【“123”,“123”】如果是后一种,你可以试试用索引去取一下,取一个就可以了

#2


引用 1 楼 u011431550 的回复:
你获取的是“123,123”还是【“123”,“123”】如果是后一种,你可以试试用索引去取一下,取一个就可以了

obj对象里面的var是String类型,所以取到的是"123, 123"

重点是以前使用struts2.0.6的时候,取到的是"123" 
升级到struts2.3.15.1之后,取到的就是"123, 123"了

#3


引用 2 楼 black_ljz 的回复:
Quote: 引用 1 楼 u011431550 的回复:

你获取的是“123,123”还是【“123”,“123”】如果是后一种,你可以试试用索引去取一下,取一个就可以了

obj对象里面的var是String类型,所以取到的是"123, 123"

重点是以前使用struts2.0.6的时候,取到的是"123" 
升级到struts2.3.15.1之后,取到的就是"123, 123"了

是不是你的表单域中有两个‘obj.var’;在struts2的任何版本中,如果表单域中包含两个相同的对象的时候struts会自动封装成item形式。

#4


引用 3 楼 u011128470 的回复:
Quote: 引用 2 楼 black_ljz 的回复:

Quote: 引用 1 楼 u011431550 的回复:

你获取的是“123,123”还是【“123”,“123”】如果是后一种,你可以试试用索引去取一下,取一个就可以了

obj对象里面的var是String类型,所以取到的是"123, 123"

重点是以前使用struts2.0.6的时候,取到的是"123" 
升级到struts2.3.15.1之后,取到的就是"123, 123"了

是不是你的表单域中有两个‘obj.var’;在struts2的任何版本中,如果表单域中包含两个相同的对象的时候struts会自动封装成item形式。

如果是表单form里面有两个域,则无论是2.0.6还是2.3.15.1都会封装成"123, 123",这个没什么问题

现在的情况是表单form里面有一个"obj.var",在拼接请求url的时候又拼了一个"obj.var=123"
这样在2.0.6和2.3.15.1两个版本就出现了截然不同的两种情况:"123"和"123, 123"
这是为啥呢?

#5


页面估计有id相同的input输入框

#6


引用 5 楼 liuyuhua0066 的回复:
页面估计有id相同的input输入框

jsp:
<input id="obj.var" name="obj.var" value="123">

js:
fm.action="xxx.do?obj.var=123";
fm.submit();


这样obj.var既存在于表单里也存在于url里
在struts2.0.6,后台获取的就是"123"
在struts2.3.15.1,后台获取的就是"123, 123"
STRUTS2重复传参问题

#7


引用 6 楼 black_ljz 的回复:
Quote: 引用 5 楼 liuyuhua0066 的回复:

页面估计有id相同的input输入框

jsp:
<input id="obj.var" name="obj.var" value="123">

js:
fm.action="xxx.do?obj.var=123";
fm.submit();


这样obj.var既存在于表单里也存在于url里
在struts2.0.6,后台获取的就是"123"
在struts2.3.15.1,后台获取的就是"123, 123"
STRUTS2重复传参问题

确实是的,你这样会存在封装item形式的,二者取其一吧,

#8


该回复于2013-08-29 12:45:34被管理员删除