0

play2のフォームに問題があります。

モデル:

@Id private ObjectId id;

<input name="id" id="id" type="hidden" value="@guidesForm.field("id").value()">

idフィールドを初期化できませんbindFromRequest()。常に空になります。また、文字列ではなくObjectIdでのみクエリを実行できます。

ObjectId id = new ObjectId(form().bindFromRequest().get("id"));

これは、objectidの正しいコンストラクターです。ご覧のとおり、これは私の回避策です。使用せずguideForm.bindFromRequest();、直接バインドする必要があります。

これは少しハッキーな感じがします。通常のバインディングを使用できるソリューションはありますか?

Form<Myclass> guideForm = form(Myclass.class);
Form<Myclass> filledForm = guideForm.bindFromRequest();
4

1 に答える 1

1

グローバルオブジェクトのonStart()にカスタムDataBinderを登録してみてください。

Formatters.register(ObjectId.class, new SimpleFormatter<ObjectId>() {

    @Override
    public ObjectId parse(String input, Locale l) throws ParseException {

        return ...; // create the object from the input of the form
    }

    @Override
    public String print(ObjectId objectId, Locale l) {
        return String.valueOf(objectId.id);
    }

});

ドキュメントは、このページの最後にあります:http ://www.playframework.org/documentation/2.0.3/JavaForms

于 2012-09-10T11:45:06.377 に答える