提问人:Dankwansere 提问时间:4/7/2017 最后编辑:Roman CDankwansere 更新时间:4/4/2021 访问量:1062
如何在 Struts 2 中将 JSP 迭代器列表传递给操作
How to pass JSP iterator list to action in Struts 2
问:
我有一个带有迭代器列表的 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 没有被调用。
答:
1赞
Roman C
4/7/2017
#1
OGNL 在创建新对象时不会调用 setter 方法。此外,如果要更新现有对象,则不需要它。应在填充操作之前初始化它。
如果准备
拦截器实现了 to execute 方法,则可以调用您的操作,您可以在其中初始化要更新的对象。Preparable
prepare()
如果需要参数从数据库中检索对象,则可以使用拦截器的堆栈。您可以在 Struts 2 中查看说明绑定后更改参数。paramsPrepareParams
也不要使用接口,因为它在默认情况下无法与上述堆栈正常工作。它需要重新配置默认堆栈,以使模型在参数拦截器触发之前推送,否则您必须手动处理参数,即来自操作上下文或已弃用的参数
。ModelDriven
ParametersAware
1赞
Dankwansere
4/8/2017
#2
我解决了这个问题,问题是在我的 getter 中(我忘了在问题中发布)中有一些逻辑阻止 getter 继续实际调用对象 setter 来设置参数。
评论
getParameterList