前一阵子,由于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"有高手来帮忙解释一下这个现象么?
先行谢过struts2url表单重复

解决方案 »

  1.   

    obj对象里面的var是String类型,所以取到的是"123, 123"重点是以前使用struts2.0.6的时候,取到的是"123" 
    升级到struts2.3.15.1之后,取到的就是"123, 123"了
      

  2.   

    obj对象里面的var是String类型,所以取到的是"123, 123"重点是以前使用struts2.0.6的时候,取到的是"123" 
    升级到struts2.3.15.1之后,取到的就是"123, 123"了
    是不是你的表单域中有两个‘obj.var’;在struts2的任何版本中,如果表单域中包含两个相同的对象的时候struts会自动封装成item形式。
      

  3.   

    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"
    这是为啥呢?
      

  4.   

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

  5.   

    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"
      

  6.   

    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形式的,二者取其一吧,