如何在 Struts 2 中将 JSP 迭代器列表传递给操作

How to pass JSP iterator list to action in Struts 2

提问人:Dankwansere 提问时间:4/7/2017 最后编辑:Roman CDankwansere 更新时间:4/4/2021 访问量:1062

问:

我有一个带有迭代器列表的 JSP,该列表使用 getters/setter 遍历在操作中创建的对象。

我能够将映射值从操作提取到 JSP 迭代器,现在我希望能够将 JSP 迭代器列表传递回操作类以映射对象,但我意识到它不会调用我的 setter 方法。

这是我的JSP:

<s:iterator  status="stat" value="parameterList" >
    <tr id="<s:property value="#stat.index"/>">
        <td><s:textfield id="parameterList[%{#stat.index}].queryParameter" name="parameterList[%{#stat.index}].queryParameter"  cssClass="size30" labelposition="left"  ></s:textfield> </td>
        <td><s:textfield id="parameterList[%{#stat.index}].parameterValue" name="parameterList[%{#stat.index}].parameterValue"  cssClass="size30" labelposition="left"  ></s:textfield> </td>
    </tr>
</s:iterator>

这是操作的片段:

private List<QueryParameter> parameterList = new ArrayList<QueryParameter>();

public void setParameterList(List<QueryParameter> parameterList) {
    this.parameterList = parameterList;
}

public DQA getDqaObject() {
    return dqa;
}

当我导航到 JSP 时,getter 被调用得很好,但是当我从 JSP 提交时,我希望我放入文本字段迭代器的值应该调用并更新操作文件中的对象,但 setter 没有被调用。

java jsp 参数 struts2 ognl

评论

0赞 Aleksandr M 4/8/2017
您缺少一个 .getParameterList
0赞 Dankwansere 4/8/2017
有一个 getParameterList,只是忘了在这个问题中复制粘贴
0赞 Dave Newton 4/8/2017
从术语上讲,您不是在传递“迭代器列表”,而是依靠值转换从您在请求中发送回的参数重新构建列表。
0赞 Dankwansere 4/9/2017
@DaveNewton是的,你是对的

答:

1赞 Roman C 4/7/2017 #1

OGNL 在创建新对象时不会调用 setter 方法。此外,如果要更新现有对象,则不需要它。应在填充操作之前初始化它。

如果准备拦截器实现了 to execute 方法,则可以调用您的操作,您可以在其中初始化要更新的对象。Preparableprepare()

如果需要参数从数据库中检索对象,则可以使用拦截器的堆栈。您可以在 Struts 2 中查看说明绑定后更改参数paramsPrepareParams

也不要使用接口,因为它在默认情况下无法与上述堆栈正常工作。它需要重新配置默认堆栈,以使模型在参数拦截器触发之前推送,否则您必须手动处理参数,即来自操作上下文或已弃用的参数ModelDrivenParametersAware

1赞 Dankwansere 4/8/2017 #2

我解决了这个问题,问题是在我的 getter 中(我忘了在问题中发布)中有一些逻辑阻止 getter 继续实际调用对象 setter 来设置参数。