玩!表格总是有错误
Play! forms always has errors
我是新人!我坚持使用一些总是有错误的表格。我无法弄清楚问题是什么,即使所有字段都已填写。
路线
GET /products/ controllers.Products.list()
GET /products/new controllers.Products.newProduct()
POST /products/ controllers.Products.save()
商品的Controller.java
import play.data.Form;
private final static Form<Product> productForm = form(Product.class);
public static Result list() {
List<Product> productList = Product.findAll();
return ok(list.render(productList));
}
public static Result newProduct() {
return ok(details.render(productForm));
}
public static Result save() {
Form<Product> boundForm = productForm.bindFromRequest();
if(boundForm.hasErrors()) {
flash("error",
"Please correct the form below.");
return badRequest(details.render(boundForm));
}
// For mystery reasons, in this line, product is always null
// Product product = boundForm.get();
Product product = new Product();
product.ean = boundForm.data().get("ean");
product.name = boundForm.data().get("name");
product.description = boundForm.data().get("description");
product.save();
flash("success",
String.format("Successfully added product %s", product));
return redirect(routes.Products.list());
}
商品的Model.java
import static play.data.validation.Constraints.Required;
public class Product {
@Required
public String ean;
@Required
public String name;
public String description;
...
}
商品的form.scala.html
@(productForm: Form[Product])
@main("Product form") {
<h1>Product form</h1>
@helper.form(action = routes.Products.save()) {
<fieldset>
<legend>Product (@productForm("name").valueOr("New"))</legend>
@helper.inputText(productForm("ean"), '_label -> "EAN")
@helper.inputText(productForm("name"),'_label -> "Name")
@helper.textarea(productForm("description"), '_label -> "Description")
</fieldset>
<input type="submit" class="btn btn-primary" value="Save">
<a class="btn" href="@routes.Products.list()">Cancel</a>
}
}
这是调试器的截图,有数据也有错误:(
我做错了什么?
~~~~更新~~~~~
我添加了列表路由和控制器操作
这是回购协议:
解决方案 - java 实现中需要 bean(缺少 setter):
public class Product {
@Required
public String ean;
@Required
public String name;
public String description;
public String getEan() {
return ean;
}
public String getName() {
return name;
}
public String getDescription() {
return description;
}
public void setEan(String ean) {
this.ean = ean;
}
public void setDescription(String description) {
this.description = description;
}
public void setName(String name) {
this.name = name;
}
}
我是新人!我坚持使用一些总是有错误的表格。我无法弄清楚问题是什么,即使所有字段都已填写。
路线
GET /products/ controllers.Products.list()
GET /products/new controllers.Products.newProduct()
POST /products/ controllers.Products.save()
商品的Controller.java
import play.data.Form;
private final static Form<Product> productForm = form(Product.class);
public static Result list() {
List<Product> productList = Product.findAll();
return ok(list.render(productList));
}
public static Result newProduct() {
return ok(details.render(productForm));
}
public static Result save() {
Form<Product> boundForm = productForm.bindFromRequest();
if(boundForm.hasErrors()) {
flash("error",
"Please correct the form below.");
return badRequest(details.render(boundForm));
}
// For mystery reasons, in this line, product is always null
// Product product = boundForm.get();
Product product = new Product();
product.ean = boundForm.data().get("ean");
product.name = boundForm.data().get("name");
product.description = boundForm.data().get("description");
product.save();
flash("success",
String.format("Successfully added product %s", product));
return redirect(routes.Products.list());
}
商品的Model.java
import static play.data.validation.Constraints.Required;
public class Product {
@Required
public String ean;
@Required
public String name;
public String description;
...
}
商品的form.scala.html
@(productForm: Form[Product])
@main("Product form") {
<h1>Product form</h1>
@helper.form(action = routes.Products.save()) {
<fieldset>
<legend>Product (@productForm("name").valueOr("New"))</legend>
@helper.inputText(productForm("ean"), '_label -> "EAN")
@helper.inputText(productForm("name"),'_label -> "Name")
@helper.textarea(productForm("description"), '_label -> "Description")
</fieldset>
<input type="submit" class="btn btn-primary" value="Save">
<a class="btn" href="@routes.Products.list()">Cancel</a>
}
}
这是调试器的截图,有数据也有错误:(
我做错了什么?
~~~~更新~~~~~
我添加了列表路由和控制器操作
这是回购协议:
解决方案 - java 实现中需要 bean(缺少 setter):
public class Product {
@Required
public String ean;
@Required
public String name;
public String description;
public String getEan() {
return ean;
}
public String getName() {
return name;
}
public String getDescription() {
return description;
}
public void setEan(String ean) {
this.ean = ean;
}
public void setDescription(String description) {
this.description = description;
}
public void setName(String name) {
this.name = name;
}
}