作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我的测试设置:
型号:
package models;
import javax.persistence.Entity;
import play.db.jpa.Model;
@Entity
public class Item extends Model {
public String propertyA;
public String propertyB;
public String getFullName() {
return this.propertyA + " - " + this.propertyB;
}
}
package controllers;
import play.*;
import play.mvc.*;
import java.util.*;
import models.*;
public class Application extends Controller {
public static void index() {
List<Item> allItems = Item.findAll();
render(allItems);
}
public static void save(List<Item> items) {
if (items == null) {
Logger.info("no items");
} else {
for (Item item : items) {
Logger.info("item: %s",item);
}
Logger.info("-------");
}
index();
}
}
#{extends 'main.html' /}
#{set title:'Home' /}
#{form @Application.save()}
Select Items:
<div>
<select name="items" style="width: 200px;" multiple="multiple" size="10">
#{list items:allItems, as: 'item'}
<option value=${item.id} >${item.fullName}</option>
#{/list}
</select>
</div>
<input type="submit" value="Save" />
#{/form}
06:22:20,560 INFO ~ -------
06:22:26,991 INFO ~ item: null
06:22:26,991 INFO ~ item: null
null
对象。即使我将 View 更改为:
<option value=${item} >${item.fullName}</option>
null
值(value)观。
public static void save(List<Long> items) {
...
}
List<Item>
而不是
List<Long>
(在这里我必须执行查询以获取项目列表)。
curl -d "items[0].id=3&items[0].propertyA=bla&items[0].propertyB=blo&items[1].id=4" http://localhost:9000/application/save
A02:39:53,072 INFO ~ item: bla - blo
02:39:53,072 INFO ~ item: null - null
02:39:53,072 INFO ~ -------
@Before(only = {"save"})
static void parseParams() {
String[] items = params.getAll("items");
params.remove("items");
for (int i = 0; i < items.length; i++) {
Item item = Item.findById(Long.parseLong(items[i]));
params.put("items[" + i + "].id", items[i]);
params.put("items[" + i + "].propertyA", item.propertyA);
params.put("items[" + i + "].propertyB", item.propertyB);
}
}
最佳答案
这是一个绑定(bind)问题,play 没有绑定(bind)它接收到的 long[] 参数。
来自 play 的文档:http://www.playframework.org/documentation/1.2.3/controllers#objectbinding
您需要将您选择的名称更改为 items.id
它可能不起作用,因为 play 期望列表的索引为 items[i].id
...
无论如何,如果这不能解决您的问题,您可以进行自定义绑定(bind),但是当您在很多地方需要此绑定(bind)时,该选项主要是好的,如果您只做一次,没有理由不要像您在帖子末尾所说的那样进行查询。 (Play 会做这个查询来做这个绑定(bind),所以你自己做不会失去或赢得任何性能)
更新
类似的东西:
@Before(only={"save"})
static void parseParams() {
String[] itens = params.getAll("items")
for (int i=0;i<itens.length;i++) {
params.put("items["+i+"].id",itens[i])
}
}
关于playframework - 如何在 Play Framework 中提交对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7417321/
我是一名优秀的程序员,十分优秀!