更新到struts2.3.15.1在jsp中打破点表示法

时间:2013-11-11 21:26:37

标签: java jsp struts2

出于安全考虑,我们更新了Struts 2.3.15.1。当我们这样做时,我们注意到我们失去了一些使用jsp中的点符号方法设置值的能力。如果我们有一个采用Foo类的地图而Foo有一个Bar类,那么我们之前已成功使用隐藏字段为Foo设置Bar类。当我们更新时,Bar类现在变为null,而在Bar类之前 - 在下面的示例中 - 将为Foo创建并给出id值为12.我知道这类似于2.3.15.1上的问题没有设置hashmap值,但是该帖子中的建议已经尝试没有成功:

[Upgrading to struts 2.3.15.1 does not set HashMap values on action class

我们需要在jsp中使用一种语法来获取Struts新版本的先前结果吗?

Class Foo

private Bar bar;

private String name;

public Bar getBar(){

return bar;

}

public void setBar(Bar bar){

this.bar = bar;

}

public String getName(){

return name;

}

public void setName(String name){

this.name = name;

}

Class Bar

private int id

public int getId(){

return id;

}

public void setId(int id){

this.id = id;

}

类ActionClass {

private Map<String, Foo> userInputMap;

public Map<String, Foo> getUserInputMap(){
return userInputMap;
}

public void setUserInputMap(Map<String, Foo>, userInputMap){
this.userInputMap = userInputMap;
}

}

的Input.jsp

<s:hidden name="foo.userInputMap<'first_map_key'>.bar.id" value="12" />

<s:textarea name="foo.userInputMap<'first_map_key'>.name />

2 个答案:

答案 0 :(得分:1)

<s:iterator value="userInputMap" >
    <s:hidden   name="userInputMap['%{key}'].bar.id" />
    <s:textarea name="userInputMap['%{key}'].name"   />
</s:iterator>

答案 1 :(得分:1)

我想回头看,原来的海报是我的同事。

我们终于找到了这个问题的答案。问题不是我们想的,问题是请求参数很长。 S2-011(参见https://struts.apache.org/release/2.3.x/docs/s2-011.html)将请求参数长度减少到100个字符。

字段中的名称被用作请求参数,在某些情况下,我们的字段名称为120个字符。

通过将以下代码放入我们的struts.xml文件中,问题得以解决。

<interceptor-ref name="params">
      <param name="paramNameMaxLength">150</param>
</interceptor-ref>