6

根据我的模型中的数据,我没有设法拥有一个具有选定值的重复字段。

目前我在我的用户模型中有:

@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 模型 toString 方法的值。

@stayField.value = Paris Mon Oct 29 00:00:00 CET 2018 Wed Jun 11 00:00:00 CEST 2014
@stayField.value.productArity = 1
4

2 回答 2

9

找到解决方案:

 @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 将显示places[1]、places[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))
于 2014-04-19T16:43:22.050 回答
1

模板表单字段中的“已选择”值应来自预填充的表单,帮助程序使用此值来确定将哪个选项标记为已选择。

例如,这是我的一个项目中用户实体的编辑表单:

控制器:

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
  }
}

现在,“权限”的选择将查看“userForm”属性“权限”以确定将哪个 HTML 选项标记为“已选择”。

于 2014-04-15T04:53:48.713 回答