如何将表单字段绑定到Play 2.03中的对象映射

时间:2012-10-15 12:44:08

标签: playframework-2.0 databinder

尝试将字段绑定到对象映射时出现此错误 “* [NullValueInNestedPathException:bean类[models.Simple]的无效属性'wrappedText [index]':无法确定自动生成默认值的属性类型]

从我读过的内容来看,自动增长与尝试在飞行中填充地图有关..但这与我得到的一样多。

我也遇到了这个question几乎同样的问题但是在Spring MVC的上下文中,我看到接受的答案似乎是建议OP实现他们自己的地图 这背后的原因是什么,还有另一种选择吗?

模特:

public class Simple {

  public String text;
  public List<String> stringList;
  public TreeMap<String,SimpleWrapper> wrappedText=new TreeMap<String,SimpleWrapper>();
}

...

public  class SimpleWrapper {

    String singleString;

    public void setSingleString(String singleString){
      this.singleString=singleString;
    }
    public String getSingleString(){
      return singleString;
    }
    public SimpleWrapper(){
      this.singleString=singleString;
    }

控制器

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()));
}

查看

@(text:String)
@import helper._

@form(routes.Management.simpleForm()){
<input type="hidden" value="string" name="stringList[0]">
<input type="hidden" value="string Again" name="stringList[1]">
<input type="hidden" value="mapp value" name="wrappedText[index].singleString">
<input type="text" id="text" name="text">
<input type="submit" value="submit">
}

这是通过@text

1 个答案:

答案 0 :(得分:1)

好的,我想我误解了另一个问题的答案。我没有实现一个LazyMap,因为apache-commons的人已经这样做了。

我最后修改了我的模型:

<强>模型

import org.apache.commons.collections15.Factory;
import org.apache.commons.collections15.map.LazySortedMap;


public class Simple {
   public String text;
   public List<String> stringList;
   Factory<SimpleWrapper> factory = new Factory() {
       public SimpleWrapper create() {
          return new SimpleWrapper();
       }
   };

   public Map<String,SimpleWrapper> wrappedText =LazySortedMap.decorate(new TreeMap<String,SimpleWrapper>(),factory);
}