2012-08-26 10 views
6

Ich bin neu in Play2 (Ich habe bereits ein Projekt mit Play1 entwickelt) und ich habe Probleme mit der Formularbindung aus Anfrage. Die Dokumentation über Formulare ist wirklich leicht. HierPlay Framework 2 Bind form from request

ist der Code meiner Controller:

private final static Form<Estimation> estimationForm = form(Estimation.class); 

/** 
* Get an estimation by form 
* @return 
*/ 
public static Result estimation() { 
    return ok(views.html.rate.estimation.render(
     estimationForm, 
     City.findAll() 
    )); 
} 

/** 
* Display estimation results 
* @return 
*/ 
public static Result results() { 
    if (request().method().equals("POST")) { 
     Form<Estimation> form = estimationForm.bindFromRequest(); 
     if (form.hasErrors()) { 
      System.out.println(form.errorsAsJson().toString()); 
      return ok(views.html.rate.estimation.render(
       form 
       City.findAll() 
      )); 
     } 
     else { 
      System.out.println(form.get()); 
      return ok(views.html.rate.results.render(

      )); 
     } 
    } 
    else { 
     return estimation(); 
    } 
} 

Ich zeige Städte in einer auserwählten wie folgt aus:

<select id="city" name="city">  
    <option value="1">Paris, France</option> 
    <option value="2">Lyon, France</option> 
    <option value="3">Marseille, France</option> 
    <option value="4">Barcelona, Spain</option> 
    <option value="5">Berlin, Germany</option> 
</select> 

Wenn ich das Formular abzuschicken, ich habe die folgende Fehlermeldung: {“ city ​​": [" Ungültiger Wert "]}

Also hier ist meine Frage: Der Ordner scheint gut mit einfachen Feldern zu funktionieren (zum Beispiel eine String-Eigenschaft in meinem Modell), aber was ist mit @Man yToOne Beziehungen?

Vielen Dank.

Antwort

9

Setzen Sie den Namen des Auswahlfelds als name="city.id"

+0

Vielen Dank für die Antwort. Ich habe meinen Code wie gesagt geändert, aber es ist nicht besser. Wenn ich form.toString() drucke, habe ich Folgendes: Form (of = class models.analytic.Estimation, data = {Betrag = 125, city.id = 1}, Wert = Some (null >> 125.0) , Fehler = {}) Aber wenn ich versuche, das Objekt (form.get()) zu speichern, habe ich einen Validierungsfehler mit NotNull Einschränkung auf das Feld Stadt ... Haben Sie eine Idee? Nochmals vielen Dank;) – c4k

+0

Sorry nach mehr Untersuchung, behebt meine Antwort mein Problem. Tatsächlich habe ich versucht, das form.get() - Objekt direkt zu speichern, aber ich habe ein Feld in der Bean, das benötigt wird und nicht in der Form, so dass sein Wert immer null war. Ich habe es behoben, indem ich dieses Feld im Controller vor dem Speichern der Entity gesetzt habe (wenn es jemand anderem helfen kann, der dieses Problem hat;)) – c4k