根据我模型中的数据,我无法设置具有所选值的重复字段。
目前我的用户模型中有:
@Required
public String username;
@ManyToMany
public List<Stay> places;
我的住宿模式:
@Required
@ManyToOne
public Place place;
@Required
@Formats.DateTime(pattern="yyyy-MM-dd")
public Date startDate;
@Required
@Formats.DateTime(pattern="yyyy-MM-dd")
public Date endDate;
我的Scala视图表单:
@(formUser: Form[User])
...
@repeat(formUser("places"), min = 1) { stayField =>
<div id="groupLocationField">
// Don't manage to reach User->Places->Place
@select(formUser("stayField.places"), options(Place.optionsTitle))
@inputDate(formUser("stayField.startDate"))
@inputDate(formUser("stayField.endDate"))
</div>
}
stayField是一个包含的Form.Field类型
Field(null,places[1],ArrayBuffer(),None,ArrayBuffer(),Some(Paris Mon Oct 29 00:00:00 CET 2018 Wed Jun 11 00:00:00 CEST 2014 null))
但似乎已将我的地方和日期转换为字符串。 @stayField包含我的Stay model toString方法的值。
@stayField.value = Paris Mon Oct 29 00:00:00 CET 2018 Wed Jun 11 00:00:00 CEST 2014
@stayField.value.productArity = 1
答案 0 :(得分:8)
找到解决方案:
@repeat(formUser("places"), min = 1) { stayField =>
<div id="groupLocationField">
@select(formUser(stayField.name.toString + ".place"), options(Place.optionsTitle))
@inputDate(formUser(stayField.name.toString + ".startDate"))
@inputDate(formUser(stayField.name.toString + ".endDate"))
</div>
}
stayField.name将显示地点[1],地点[2]等...
请注意,我必须使用Place.optionsTitle而不是我在其他@select字段中使用的经典Place.options。
public static Map<String,String> optionsTitle() {
LinkedHashMap<String,String> options = new LinkedHashMap<String,String>();
for(Place c: Place.find.orderBy("title desc").findList()) {
options.put(c.title, c.title);
}
return options;
}
public static Map<String,String> options() {
LinkedHashMap<String,String> options = new LinkedHashMap<String,String>();
for(Place c: Place.find.orderBy("title desc").findList()) {
options.put(c.id.toString(), c.title);
}
return options;
}
编辑:事实上我没有必要使用特定的方法optionsTitle(),我忘了在我的选择中指定地点ID:
@select(formUser(stayField.name.toString + ".place"), options(Place.optionsTitle))
应该成为:
@select(formUser(stayField.name.toString + ".place.id"), options(Place.options))
答案 1 :(得分:1)
&#34;选择&#34;模板表单字段中的值应来自预先填充的表单,帮助程序使用此值来确定将标记为选中的选项。
例如,这是我的一个项目的用户实体的编辑表单:
控制器:
def edit(id: Long) = authorizedAction(Administrator) {
Ok(views.html.user.edit(id, editUserForm.fill(User.findById(id).get)))
}
模板:
@(id: Long, userForm: Form[User])
@main("Edit User") {
<h2>Edit User</h2>
@helper.form(action = routes.UserController.update(id)) {
<fieldset>
<input type="hidden" name="id" value="@userForm("id").value" />
@helper.inputText(userForm("name"), '_label -> "Name")
@helper.inputText(userForm("email"), '_label -> "Email Address")
@helper.select(userForm("permission"),
models.Permission.displayValues,
'_label -> "Permissions", '_default -> "-- Select --",
'_showConstraints -> false)
</fieldset>
// Submit button
}
}
现在,选择&#34;权限&#34;将会看到&#34; userForm&#34;财产&#34;许可&#34;确定将哪个HTML选项标记为&#34;选择&#34;。