【问题标题】:How to pass JSP iterator list to action in Struts 2如何将 JSP 迭代器列表传递给 Struts 2 中的操作
【发布时间】:2017-04-06 20:33:18
【问题描述】:

我有一个带有迭代器列表的 JSP,它使用 getter/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>

这是一个sn-p的动作:

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没有被调用。

【问题讨论】:

  • 您缺少getParameterList
  • 有个getParameterList,刚才忘了复制粘贴到这个问题里
  • 作为术语,您没有传递“迭代器列表”,而是依靠值转换从您在请求中发回的参数重建列表。
  • @DaveNewton 是的,你是对的

标签: java jsp parameters struts2 ognl


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    如果您需要一个参数来从数据库中检索您的对象,您可以使用paramsPrepareParams 拦截器的堆栈。可以看描述Changing parameters after bind in Struts 2

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

    【讨论】:

      猜你喜欢
      • 2016-05-26
      • 1970-01-01
      • 1970-01-01
      • 2014-06-08
      • 1970-01-01
      • 1970-01-01
      • 2013-06-11
      • 2012-06-04
      • 1970-01-01
      相关资源
      最近更新 更多