我认为这将是一个相当快速且可能令人尴尬的简单答案。我一直绞尽脑汁,没有多少互联网搜索似乎找到了可能的解决方案。我正在使用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%正确,我会接受这个答案。
答案 0 :(得分:3)
使用:
@(studentForm: play.data.Form[Student])
<input type="hidden" name="college.id" value='@(studentForm("college.id").value)'>
顺便说一下,尽量避免使用form
单词作为你的param的名字,这很容易产生名字冲突,即。使用@helper
导入...而不是使用像studentForm
这样的名称作为经验法则 - 它将始终是干净的,您指的是atram。