【问题标题】:Struts2 sending list data from JSP to Action class: alternative wayStruts2 将列表数据从 JSP 发送到 Action 类:替代方式
【发布时间】:2014-10-30 17:41:14
【问题描述】:

我正在向一位同事解释如何使用herehere 解释的索引从JSP 页面获取列表数据以返回到操作类。他不太明白,自己摸索了一下,直到他突然完全不使用索引就让它工作了!

在他的 JSP 页面中,他有:

<input type="checkbox" name="contactNameList" value="someValue1">
<input type="checkbox" name="contactNameList" value="someValue2">
<input type="checkbox" name="contactNameList" value="someValue3">
<input type="checkbox" name="contactNameList" value="someValue4">

在他的动作课上,他有“合适的”二传手:

public List<String> getContactNameList()

public void setContactNameList(List<String> list)

我很困惑为什么会这样。我认为这是可行的,因为他正在发送非 bean 数据(在本例中为字符串),并且 Struts2/OGNL 中内置了一个智能功能,可以将值附加到列表而不是覆盖他们。

任何人都可以详细解释这个“无索引”案例的幕后情况吗?上面的 sn-ps 是如何实例化和填充字符串列表的?

【问题讨论】:

  • 那么为什么它不能工作呢?如果您有一个列表,您可以随时调用add 方法向列表中添加一个更多元素,但是如果您需要更改/更新该列表中的特定元素(在某个索引处)怎么办?您将如何引用该元素?
  • 在action类中,结果是一个字符串列表。我们不需要专门引用任何字符串,只需遍历整个集合即可。无论如何,我很好奇java代码中发生了什么。何时以及如何调用 add 方法? struts2 怎么知道它不应该每次都用新的空列表覆盖列表?使用索引时这很清楚,但没有我看不到它。
  • 什么意思?它IS在您每次调用操作时都会重新创建。有无索引都无所谓。
  • 远离你的同事。他是 h4x00r,会给你的工作组带来痛苦和诅咒。 :P

标签: java jsp struts2 type-conversion ognl


【解决方案1】:

您应该了解 bean 数据而不是 bean 数据作为参数传递给操作。参数有一个结构,如果你实现ParameterAware,你可以找到它。

请注意,将返回给定名称的所有参数值,因此 地图中物体的类型是java.lang.String[]

然后 XWork Type Conversion 会尽力将此映射转换为 beans 属性。见Built in Type Conversion Support

框架中的常规类型转换是透明的。一般来说, 您需要做的就是确保 HTML 输入的名称可以 在 OGNL 表达式中使用。 (HTML 输入是表单元素和其他 GET/POST 参数。)

在没有索引的情况下,参数被映射在一个键下,而不是索引名称在它们自己的名称下使用。

【讨论】:

    【解决方案2】:

    你必须在上面的代码中设置索引值

    喜欢

    <input type="checkbox" name="contactNameList[0]" value="someValue1">
    

    【讨论】:

    • 不,这就是这个问题的全部意义所在,您不必为它设置一个索引 :),我认为这很奇怪。
    • 不,你没有;如果您不这样做,S2 会注意到存在多个值,然后迭代并添加到集合中。
    猜你喜欢
    • 2019-04-06
    • 2012-04-18
    • 2018-03-01
    • 2013-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-30
    相关资源
    最近更新 更多