【发布时间】:2015-11-25 23:15:38
【问题描述】:
Struts 版本:2.3.16.3
有没有一种无需指定索引即可填充对象列表的方法?目前我必须像这样引用集合:
<input name="myCollection[0].myProperty" value="some value" />
我真的很想能够做这样的事情:
<input name="myCollection[].myProperty" value="some value" />
我正在使用 JavaScript 在页面上动态添加和删除元素,并且使用 JavaScript 正确建立索引一直很痛苦。而是让后端按照元素从表单中出现的顺序添加到集合的末尾。类似于 PHP 的处理方式。
parameters interceptor 的文档说它实际上只是一个输入名称绑定到的 ognl 表达式。我去了ognl docs,它说你可以像这样引用数组:
array["length"]
这将是数组中的下一个元素。参数拦截器正在吐出一条消息,它正在拒绝此参数名称。我真的很想找到一种方法来实现这一点,即使这意味着扩展参数拦截器。
【问题讨论】:
-
array["length"]这将是数组中的下一个元素 - 这是不正确的。在您的操作类中创建字符串列表变量并在 jsp 中像name="list"那样引用它。 -
为什么不指定参数名绑定的集合中的索引?
-
@RomanC 在处理从页面上动态删除元素的页面时会变得很痛苦。我通常使用表格数据执行此操作,用户可以从表格中添加/删除行。当他们删除该行时,您最终会在索引中出现一个间隙,从而在集合中的该位置生成一个空值。它要么需要用 JavaScript 解决,要么从控制器中的列表中删除空值,或者在处理列表时在控制器中放置一个 if null 继续。如果无法处理此问题,则通过修改参数拦截器似乎应该有一个更简单的解决方案。
-
您不能简单地删除索引,因为这是确定某个属性属于哪个对象的唯一方法。
-
@AleksandrM 是的,你说得对,我不知道我为什么不这么想。它不知道何时跳转到下一个索引。您必须发送一些其他特殊参数来告诉它转到下一个索引。你的问题是我问题的直接答案。如果您想将其发布为答案,我会接受。
标签: javascript java jsp struts2 ognl