私は Play Framework 2.0.4 を使用しています。私のモデル クラスでは、変数の 1 つがArray List<Long>
データ型であり、ここで宣言されています。
public List<Long> associateBooks = new ArrayList<Long>();
同じモデル タイプの 2 つの異なるオブジェクトの ID を表す 2 つの Long 値を持つコントローラー メソッドを呼び出すビュー テンプレートがあります。
GET /addAssociate/:oID/:id controllers.Application.addAssociate(oID: Long, id: Long)
呼び出されたコントローラー メソッド:
public static Result addAssociate(Long oID, Long id) {
Book.addAssociate(oID, id);
return redirect(routes.Application.index());
}
コントローラー メソッドがアクションを実行していることはわかります。これは、インデックス ページにリダイレクトされるためです。また、URL が期待どおりに変更されるため、コントローラー メソッドが値を受け取ることもわかります。
問題は、次に示す Book モデル メソッド addAssociate にあります。
public static void addAssociate(Long oID, Long match) {
List<Book> allBooks = new ArrayList<Book>();
allBooks = find.all();
for(Book book: allBooks) {
if(book.id == oID) {
book.associateBooks.add(match);
book.save();
}
}
}
このメソッドでは、すべての book オブジェクトを調べて、idoID
がビューからコントローラーに渡された変数の値と一致する場合、 match (他の引数) の値を、属するassociateBooks
リスト ( type ) に追加します。Long
各ジャーニー オブジェクトに。次に、この反復中に考慮されているオブジェクトへの変更を保存しようとします。問題は、他のビュー テンプレートでリストを印刷すると、リストassociateBooks
がまだ空に見えることです。
更新:条件を削除しても、リストには何も追加されません。