Play Framework 2:如何访问视图模板中隐藏表单字段的默认值?

时间:2013-12-11 11:09:44

标签: java forms playframework-2.2

我认为这将是一个相当快速且可能令人尴尬的简单答案。我一直绞尽脑汁,没有多少互联网搜索似乎找到了可能的解决方案。我正在使用Play框架2.2。为了解决这个问题,我构建了一个简单的“在线大学注册表”示例,让学生完成。

在我们的模型中,我们使用的是Ebean。以下课程显示了这种关系,即一所大学有很多学生。

@Entity
public class College extends Model {
  @Id
  public Long id;
  public String name;
  @OneTOMany(cascade=CascadeType.ALL)
  public List<Student> Student;

  public College(String name) {
    this.name = name;
  }

  // all other variables and methods for College class
}

@Entity
public class Student extends Model {
  @Id
  public Long id = id;
  public String name;
  @ManyToOne
  public College college;

  public Student(College college) {
    this.college = college
  }

  // all other variables and methods for Student class
}

在Controller索引方法中,我们实例化我们的表单。我们假设我们知道学生将参加哪所大学,并希望将其设置为表格中的默认隐藏价值。目的是呈现学生表格并将其传回给答复。

Form<Student> form = Form.form(Student.class);
College college = new College("My College");
form.fill(new Student(college));
return ok(student.render(form));

最后,关于这个问题,考虑所涉及的类,在渲染视图的同时如何使用这些默认值设置隐藏字段?为什么我不知道有没有隐藏的现场助手......

@(studentForm: play.data.Form[Student])
...
@form(routes.Students.create()) {
  ...
  <input type="hidden" name="college.id" value="???">
  ...
}

更新

好吧,经过多次脱发后我终于找到了问题所在。最初,正如biesior正确地建议我使用@(studentForm("college.id").value),但是由于这不起作用,我认为我一定做错了...是的,但是,它不是在视图中,而是在控制器中。如果我们添加:form = form.fill(new Student(college))那么它就像梦一样。愚蠢的错误。由于biesior 100%正确,我会接受这个答案。

1 个答案:

答案 0 :(得分:3)

使用:

@(studentForm: play.data.Form[Student])

<input type="hidden" name="college.id" value='@(studentForm("college.id").value)'>
顺便说一下,尽量避免使用form单词作为你的param的名字,这很容易产生名字冲突,即。使用@helper导入...而不是使用像studentForm这样的名称作为经验法则 - 它将始终是干净的,您指的是atram。