2012-03-29 6 views
0

OK, also habe ich einige Probleme beim Abrufen von Daten aus einem Formular, um an eine Modellklasse zu binden, die ich habe.Formularüberprüfung in Play 2.0

Ich habe eine Klasse Frage, die im Grunde wie folgt aussieht:

@Entity 
public class Question extends Model { 
    @Id @Required public int id; 
    public String title; 
    public String body; 
    ...methods... 
} 

Also ich verwenden möchte diese als Vorlage eine Frage für ein Formular zu erstellen, für einen Benutzer, so ich eine statische Instanz (wie sie tun in den Proben)

final static Form<Question> question_form = form(Question.class); 

So weit so gut, alles kompiliert. Das Problem kommt, wenn ich tatsächlich das Formular abschicken:

Form<Question> filled_form = new Form<Question>(Question.class).bindFromRequest(); 

Hier erhalte ich die Fehlermeldung:

[UnexpectedTypeException: No validator could be found for type: java.lang.Integer] 

Mein Denken, wie so geht zu gehen ist ein Design-Muster zu verwenden, die:

1.) Erstellen Sie Vorlagenklassen speziell für Formulare, die keine Fremdschlüssel, IDs und Informationen enthalten, die nicht in einem für den Benutzer bestimmten Format vorliegen. (Dh, wenn die Question einen Fremdschlüssel für Topic hat, die QuestionForm Klasse hätte ein String topic Feld.

2.) Neue Methoden in dem Question Modell, das so etwas wie getFormForQuestion(Question) und getQuestionForForm(Form<Question>) und dann verwenden Sie diese Methoden geht CRUD zu tun Funktionen.

Im Grunde interagieren der Benutzer und der Controller mit Forms, und dann weiß das Model, wie man diese Formulare nimmt und sie in Einträge in der Datenbank umwandelt.

Ist dies ein vernünftiger Weg? Oder gibt es einen besseren Weg, dies zu tun?

UPDATE:

Scheint festgelegt werden, wenn @GeneratedValue Anmerkung anstatt die @Required Anmerkung, aber ich bin immer noch neugierig in Bezug auf meine vorgeschlagenen Form Design-Muster.

Auch das Entfernen von @Required scheint die Probleme zu beheben. Immer noch auf der Suche nach Kommentaren zum erwähnten Designmuster!

+1

Sie brauchen nicht 'id', weil das von vererbt die Oberklasse 'Model'. –

+0

Oh großartig, noch besser, denke ich. danke – wbarksdale

+0

Hat das dein Problem gelöst? Soll ich das als Antwort auf diese Frage posten? –

Antwort

1

ID Feld benötigt keine Validierung, ORM wird sich darum kümmern. Natürlich sollten Sie nicht id in Form platzieren (es überhaupt nicht bearbeitet werden sollte - es ist üblich AUTO_INCREMENT) Und besser machen es lange, gerade:

@Id 
public Long id; 
+0

Kommentare zu dem Designmuster, das ich erwähnt habe? – wbarksdale

+0

@weezybizzle Ich bin mir nicht sicher, ob ich gut verstanden habe, aber wenn dieses Feld nicht deklariert wird, erstellt Ebean kein ID-Feld ... :) was in den meisten Fällen einfach nutzlos ist. – biesior

+0

Ok, ich werde über dieses Designmuster separat veröffentlichen. – wbarksdale