如何将参数从 <s:iterator> 标签内的文本字段传递到 Struts 2 中的操作?

问题描述 投票:0回答:2

我有一个带有

<s:iterator>
标签列表的 JSP,它使用 getter/setter 迭代在操作中创建的对象。

我能够将映射值从操作拉到

<s:iterator>
标签的文本字段,现在我希望能够将文本字段值从
<s:iterator>
传递回操作类以映射对象,但我意识到它不会调用我的 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 提交表单时,我期望放入

<s:iterator>
标记内的文本字段中的值应该传递并更新操作类中的对象,但是setter 没有被调用。

java jsp parameters struts2 ognl
2个回答
1
投票

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


1
投票

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

prepare
拦截器可以调用您的操作,如果它实现了
Preparable
来执行
prepare()
方法,您可以在其中初始化要更新的对象。

如果您需要一个参数来从数据库检索对象,您可以使用

paramsPrepareParams
拦截器的堆栈。您可以查看说明在 Struts 2 中绑定后更改参数

也不要使用

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

© www.soinside.com 2019 - 2024. All rights reserved.