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"]
这将是数组中的下一个元素。参数拦截器正在吐出一条消息,表明它正在拒绝这个参数名称。我真的想找到一种方法来实现这一点,即使这意味着扩展参数拦截器。
答案 0 :(得分:1)
好吧,因为
最简单的解决方案是:
myCollection[].myProperty
和这样你在操作元素时就不必费心了,但最后只需要一次,当你可以通过名字或其他东西简单地循环它们时,通过指定正确的索引用javascript改变它们的名字
jQuery的启动示例:
$(function() {
$('#myform').submit(function() {
$('[name^="myCollection[]"]').each(function(index) {
var oldV = this.name;
var newV = oldV.replace("myCollection[]", "myCollection[" + index + "]");
console.log("was: " + oldV + " - now is: " + newV);
this.name = newV;
});
return false;
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<form id="myform">
Open Javascript Console, then press submit, then inspect input elements
<br>
<input name="myCollection[].myProperty" />
<br>
<input name="myCollection[].myProperty" />
<br>
<input name="myCollection[].myProperty" />
<br>
<input name="myCollection[].myProperty" />
<br>
<input name="myCollection[].myProperty" />
<br>
<button>submit</button>
</form>
答案 1 :(得分:0)
您需要以某种方式识别某个属性属于哪个对象。索引是最简单的方法,因此您不能只删除它们。
有很多方法可以达到你想要的效果。使用javascript查看Andrea对一个可能解决方案的回答。
您还可以将对象属性拉到简单列表,然后将它们设置为对象。
E.g。
private List<String> myProperty;
可以在JSP w / o索引中引用:
<input name="myProperty" value="first value" />
<input name="myProperty" value="second value" />
当然,如果你有许多属性,你需要以某种方式在JSP中同步它们,使得列表中属性的顺序和大小对于每个属性都是一致的。