3

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

[升级到 struts 2.3.15.1 不会在动作类上设置 HashMap 值

是否有我们需要在我们的 jsp 中使用的语法来使用新版本的 Struts 获得以前的结果?

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;

}

班级酒吧

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;
}

}

输入.jsp

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

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

2 回答 2

1
<s:iterator value="userInputMap" >
    <s:hidden   name="userInputMap['%{key}'].bar.id" />
    <s:textarea name="userInputMap['%{key}'].name"   />
</s:iterator>
于 2013-11-12T09:45:26.027 回答
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>
于 2013-11-27T12:37:41.197 回答