2016-07-25 2 views
0

私はプレイ中です!私はいつもエラーがあるいくつかのフォームに固執しています。すべてのフィールドが満たされていても、問題は何かを把握することはできません。再生!フォームには常にエラーがあります

ルート

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> 
    } 
} 

は、デバッガのスクリーンショットであるデータとの誤差もあります:(私は間違って何をやっている

Using debugger

?私は、リストのルートとコントローラのアクションここで

を追加

~~~~~

~~~~アップデートはレポです:

https://github.com/LTroya/up-and-running-play

+0

es.Products.list'が 'routes'に定義されておらず、コントローラ、main.scala.htmlがありません。 10分でゼロから再現するのは難しいです。 –

+0

@AndrzejJozwik完了。私は、リストルートとリストとgithubリポジトリ – LTroya

答えて

1

ソリューション - あなたは豆を必要としますJavaの実装では(セッターが見つからなかった):

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; 
    } 
} 
+0

ああを処理するコントローラのアクションを追加しました。ありがとう、それは動作します。 – LTroya

関連する問題