如何将表单字段绑定到Play 2 Framework中的对象

时间:2012-10-05 09:30:20

标签: java playframework-2.0

我一直无法让我的表单绑定正常工作(基本上是试用和错误)。 在Play 2.0.3(Java)中将Form绑定到由其他对象组成的Model的正确方法是什么?

我把这个小例子弄清楚了,试着更好地理解它。 但即便是这个基本的例子似乎也有问题。

我正在尝试绑定Form的Simple类有3个字段,一个普通的字符串字段,一个字符串列表和一个自定义字段,它只是一个字符串的包装。 在提交表单时,将填充所有字段,但自定义字段保持为空。

以下是实际代码

控制器

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

1 个答案:

答案 0 :(得分:1)

为了允许对象的自动绑定,你必须为你的类提供一个setter方法。在我的实验中,SimpleWrapper类缺少该类应该的setter方法

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

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

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

即使构造函数也无关紧要。

这是关于可能有用的基础Spring数据绑定器link的链接。我从Play google小组那里得到了这个