日期:2014-05-18  浏览次数:20744 次

STRUTS2重复传参问题
前一阵子,由于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 url 表单 重复

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

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

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

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

是不是你的表单域中有两个‘obj.var’;在struts2的任何版本中,如果表单域中包含两个相同的对象的时候struts会自动封装成item形式。
------解决方案--------------------
页面估计有id相同的input输入框
------解决方案--------------------
引用:
Quote: 引用:

页面估计有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"

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