如何将 JSP 迭代器列表传递给 Struts 中的操作 2
How to pass JSP iterator list to action in Struts 2
我有一个 JSP 和一个迭代器列表,该列表迭代在使用 getters/setters 的操作中创建的对象。
我能够将映射值从操作拉到 JSP 迭代器,现在我希望能够将 JSP 迭代器列表传递回操作 class 来映射对象,但是,我意识到它不会调用我的 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。
OGNL 在创建新对象时不会调用 setter 方法。如果你想更新现有的对象,你也不需要它。它应该在填充操作之前进行初始化。
prepare
interceptor如果实现了Preparable
就可以调用你的action来执行prepare()
方法,你可以在其中初始化要更新的对象。
如果您需要一个参数来从数据库中检索您的对象,您可以使用 paramsPrepareParams
拦截器的堆栈。你可以看到描述 Changing parameters after bind in Struts 2.
也不要使用 ModelDriven
接口,因为它在默认情况下无法与上述堆栈一起正常工作。它需要重新配置默认堆栈以使模型在 params
interceptor 触发之前推送,否则您必须手动处理参数,即来自操作上下文或已经弃用的 ParametersAware
。
我解决了这个问题,问题是在我的 getter(我忘记在问题中 post)中有一些逻辑阻止 getter 继续实际调用对象 setter 来设置参数。
我有一个 JSP 和一个迭代器列表,该列表迭代在使用 getters/setters 的操作中创建的对象。
我能够将映射值从操作拉到 JSP 迭代器,现在我希望能够将 JSP 迭代器列表传递回操作 class 来映射对象,但是,我意识到它不会调用我的 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。
OGNL 在创建新对象时不会调用 setter 方法。如果你想更新现有的对象,你也不需要它。它应该在填充操作之前进行初始化。
prepare
interceptor如果实现了Preparable
就可以调用你的action来执行prepare()
方法,你可以在其中初始化要更新的对象。
如果您需要一个参数来从数据库中检索您的对象,您可以使用 paramsPrepareParams
拦截器的堆栈。你可以看到描述 Changing parameters after bind in Struts 2.
也不要使用 ModelDriven
接口,因为它在默认情况下无法与上述堆栈一起正常工作。它需要重新配置默认堆栈以使模型在 params
interceptor 触发之前推送,否则您必须手动处理参数,即来自操作上下文或已经弃用的 ParametersAware
。
我解决了这个问题,问题是在我的 getter(我忘记在问题中 post)中有一些逻辑阻止 getter 继续实际调用对象 setter 来设置参数。