Collections Play Framework如何将集合传递给action create()?

Collections Play Framework如何将集合传递给action create()?,collections,parameters,playframework,Collections,Parameters,Playframework,我是游戏框架的初学者。我在传递参数时遇到问题。 我想将集合从视图传递到控制器。我不知道该怎么做。当我从视图中获取集合时,总是得到“null”。 我的代码如下: 控制器中的代码: public static void create(List<Book> books) throws Exception { for(Book book : books){ System.out.println(book.get(0).author) // i got null

我是游戏框架的初学者。我在传递参数时遇到问题。
我想将集合从视图传递到控制器。我不知道该怎么做。当我从视图中获取集合时,总是得到“null”。 我的代码如下:
控制器中的代码:

public static void create(List<Book> books) throws Exception {
     for(Book book : books){
          System.out.println(book.get(0).author) // i got null :(
     }
}
publicstaticvoidcreate(列表簿)引发异常{
用于(书籍:书籍){
System.out.println(book.get(0.author)//我得到空值:(
}
}
HTML代码

Book 1:
<input type="text" name="books.author" />
<input type="text" name="books.title" />
Book 2:
<input type="text" name="books.author" />
<input type="text" name="books.title" />
第一册:
第二册:
当我提交时,我想在数据库中添加2条记录,包括Book1和Book2。请支持我


谢谢

您可以通过简化将数组指示符添加到HTML代码中来实现这一点

Book 1:
<input type="text" name="books[0].author" />
<input type="text" name="books[0].title" />
Book 2:
<input type="text" name="books[1].author" />
<input type="text" name="books[1].title" />
第一册:
第二册:
我已经测试过这个解决方案,效果很好


还请注意,您的println将不会编译,因为您正在对Book对象而不是List对象调用
get(0)
。如果您只是println
Book.author
,它会根据需要输出author。

您可以通过简单地将数组指示符添加到HTML代码中来实现这一点

Book 1:
<input type="text" name="books[0].author" />
<input type="text" name="books[0].title" />
Book 2:
<input type="text" name="books[1].author" />
<input type="text" name="books[1].title" />
第一册:
第二册:
我已经测试过这个解决方案,效果很好


还请注意,您的println不会编译,因为您正在对Book对象而不是List对象调用
get(0)
。如果您只是println
Book.author
,它会根据需要输出作者。

如果有人需要Javascript示例来动态添加和删除书籍(需要JQUERY):


$(文档).ready(函数(){
var账面价值=0;
$('#btnAddBook')。单击(函数(){
图书计数++;
//newElem=转到父div,然后获取上一个容器
var newElem=$(this.parent().prev().clone().attr('id','book['+bookCount+']);
//对于div中的每个输入,将索引更改为最新的bookCount
$(newElem).find(“输入”).each(函数(){
var name=$(this.attr('name');
var leftBracket=name.indexOf(“[”);
var rightBracket=name.indexOf(“]”);
var beforeBracketString=name.substring(0,左括号+1);//+1以包含括号
var afterBracketString=name.substring(右括号);
$(this.attr('name',beforeBracketString+bookCount+afterBracketString);
});
//把它插在书的末尾
$(this).parent().prev().after(newElem);
$(newElem).find(“输入”).each(函数(){
$(this.attr('id'),$(this.attr('id')+bookCount);
});
//启用“删除”按钮
$('btnRemovebook').removeAttr('disabled');
//如果我们是16个div,禁用add按钮
如果(账面数=15)
$(this.attr('disabled','disabled');
});
$('#btnRemoveBook')。单击(函数(){
簿记--;
//删除最后一个book div
$(this.parent().prev().remove();
//如果已禁用添加,请启用它
$('btnAddbook').removeAttr('disabled');
//永远不要让他们删除最后一本书
如果(账面计数=0)
$(this.attr('disabled','disabled');
});
});
书:

如果有人需要Javascript示例来动态添加和删除书籍(需要JQUERY):


$(文档).ready(函数(){
var账面价值=0;
$('#btnAddBook')。单击(函数(){
图书计数++;
//newElem=转到父div,然后获取上一个容器
var newElem=$(this.parent().prev().clone().attr('id','book['+bookCount+']);
//对于div中的每个输入,将索引更改为最新的bookCount
$(newElem).find(“输入”).each(函数(){
var name=$(this.attr('name');
var leftBracket=name.indexOf(“[”);
var rightBracket=name.indexOf(“]”);
var beforeBracketString=name.substring(0,左括号+1);//+1以包含括号
var afterBracketString=name.substring(右括号);
$(this.attr('name',beforeBracketString+bookCount+afterBracketString);
});
//把它插在书的末尾
$(this).parent().prev().after(newElem);
$(newElem).find(“输入”).each(函数(){
$(this.attr('id'),$(this.attr('id')+bookCount);
});
//启用“删除”按钮
$('btnRemovebook').removeAttr('disabled');
//如果我们是16个div,禁用add按钮
如果(账面数=15)
$(this.attr('disabled','disabled');
});
$('#btnRemoveBook')。单击(函数(){
簿记--;
//删除最后一个book div
$(this.parent().prev().remove();
//如果已禁用添加,请启用它
$('btnAddbook').removeAttr('disabled');
//永远不要让他们删除最后一本书
如果(账面计数=0)
$(this.attr('disabled','disabled');
});
});
书:

问题是我不知道将提交多少本书。有时是2本、5本或更多。那么,有没有其他方法可以代替索引每本书?您可以使用javascript做一些事情,因此对于每本新书,您可以输出代码,使其具有正确的索引标识符。问题是我不知道将提交多少本书。S有时是2或5或更多。那么,有没有其他方法可以代替索引每本书?您可以使用javascript做一些事情,因此对于每本新书,您可以输出代码,使其具有正确的索引标识符。