1

フォーム バインディングを適切に機能させるのに問題がありました (基本的に試行錯誤)。In Play 2.0.3 (Java) フォームを他のオブジェクトで構成されるモデルにバインドする適切な方法は何ですか?

この小さな例を作成して、よりよく理解しようとしました。しかし、この基本的な例でさえ問題があるようです。

フォームをバインドしようとしている単純なクラスには、プレーンな文字列フィールド、文字列のリスト、および文字列の単なるラッパーであるカスタム フィールドの 3 つのフィールドがあります。フォームを送信すると、null のままのカスタム フィールドを除いて、すべてのフィールドが入力されます。

実際のコードはこちら

コントローラ

static Form<Simple> simpleform=form(Simple.class);
public static Result simpleForm(){
Form<Simple> filledForm=simpleform.bindFromRequest();
        System.out.println(filledForm);
    return ok(views.html.simpleForm.render(filledForm.get().toString()));
}

モデル

public class Simple {
    public String text;
    public List<String> stringList;
    public SimpleWrapper wrappedText;
    @Override
    public String toString(){
        return text +"-"+simpleWrapper+"-"+stringList;
}

public  class SimpleWrapper{
        String otherText;
        public SimpleWrapper(){}
        public SimpleWrapper(String otherText){
            this.otherText=otherText;
        }
        @Override
        public String toString(){
            return otherText;
        }
    }

意見

@(text:String)
@import helper._
@form(routes.Management.simpleForm()){
  <input type="hidden" value="string" name="stringList[0]">
  <input type="hidden" value="stringAgain" name="stringList[1]">
  <input type="hidden" value="wrapped" name="wrappedText.otherText">
  <input type="text" id="text" name="text">
  <input type="submit" value="submit">
}
This was passed @text
4

1 に答える 1

1

オブジェクトの自動バインディングを可能にするには、クラスにセッター メソッドを指定する必要があります。

public  class SimpleWrapper{
    String otherText;
    public SimpleWrapper(){}

    public setOtherText(String otherText){
     this.otherText=otherText;
    }

    @Override
    public String toString(){
        return otherText;
    }
}

コンストラクターでさえ無関係であるように見えます。

これは、役立つ可能性のある、基になる Spring データ バインダーリンクに関するリンクです。Play の Google グループから入手しました

于 2012-10-13T10:15:20.177 に答える