gpt4 book ai didi

java - 升级到 struts 2.3.15.1 不会在操作类上设置 HashMap 值

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:28:31 25 4
gpt4 key购买 nike

我从 2.1.6 升级到 2.3.15.1,因为最新版本中提供了安全修复程序。但是,现在表单字段值没有发布到 Action 类。基本上,当提交表单时,我将 JSP 中的 HashMap props 填充到 Action 类中。当我将 struts 版本升级到 2.3.15.1 时,这不起作用。没有代码更改。当我调试代码时,我注意到 setProps 方法没有被调用。是不是不允许了。有什么解决方法吗?一旦我恢复了 struts 库更改,一切都会完美无缺。请帮忙。

这是我的代码的样子:

Action 类:

    private Map<String, Wall> props;

public void prepare(){
//fill up props map here.
}
public String view(){
return INPUT;
}

public String save(){
myService.setProps(props);
return INPUT;
}

public void setProps(Map<String, Wall> props) {
this.props = props;
}

public Map<String, Wall> getProps() {
return props;
}

JSP:

<s:iterator value="props.entrySet()" id="prop" status="propStatus">
<s:textfield name="props['%{#prop.key}'].value" value="%{#prop.value.value}" />
</s:iterator>

最佳答案

解决了。在新的 Struts 版本中,参数名称更加严格。在我的例子中,我有参数名称,例如 props['1.2.3'], props['a.b.c'] or props['a-b-c'] .这些被新的支柱过滤掉了。这是对此进行解释的链接:http://struts.apache.org/development/2.x/docs/s2-009.html .最后一部分解释了集合可能停止工作的原因。

我将拦截器堆栈中的 acceptParamNames 更改为 <param name="acceptParamNames">\w+((\.\w+)|(\[\d+\])|(\['\w+(\-\w+)*'\]))*</param>它解决了这个问题。我摆脱了 props['a.b.c']属性名称,所以上面的正则表达式没有涵盖它,但它涵盖了 props['a-b-c'] .

感谢@Roman C 前来帮助我。

关于java - 升级到 struts 2.3.15.1 不会在操作类上设置 HashMap 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18028172/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com