У меня есть форма с повторяющимся поле: Формы воспроизведения: как заполнить повторяющееся поле?
case class MyForm(topics: List[Int])
val myForm: Form[MyForm] = Form(
mapping(
"topics" -> list(number)
)(MyForm.apply _)(MyForm.unapply _)
)
И соответствующий вид:
@form(...) {
<h2>Topics of interest:</h2>
@for(Topic(id, name, _) <- Topics.all) {
@checkbox(
bidForm(s"topics[$id]"),
'_label -> (name + ":").capitalize,
'value -> id.toString)
}
<input type="submit" id="submit" value="Save">
}
До сих пор так хорошо, если есть ошибка в поле, и я вновь сделать его передача myForm.bindFromRequest
.
Я хотел бы предварительно заполнить форму данными из моей базы данных. С другими типами полей (number
, text
, option()
и так далее) я могу населён existingMyForm
с чем-то вроде этого:
val existingMyForm = myForm.fill(MyForm(
// Queries the database and return a list of case classes with field id: Int
Topics.of(member).map(_.id)
))
Однако с list
этот подход терпит неудачу, и я должен вручную сделать отображение:
val existingMyForm = myForm.bind(
Topics.of(member).map(t => ("topics[%s]".format(t.id), t.id.toString)).toMap
)
Есть ли лучший способ сделать это?
У меня такая же проблема! Вы исправили его? если да, то как? –
Nop, я все еще использую тот же [хак] (https://github.com/OlivierBlanvillain/SlickChair/blob/master/app/controllers/Submitting.scala#L70) :( – OlivierBlanvillain