Вопрос по playframework-2.0 – связать несколько объектов в игровой фреймворк 2.0 из формы

5

я отчаянно пытаюсь получить список значений из представления формы и связать его со списком объектов.

Что работает, чтобы получить одну строку:

//class
case class Task(name: String, description: String)

val taskForm: Form[Task] = Form(
  mapping(
  "name" -> text,
  "description" -> text

  )(Task.apply)(Task.unapply)
)


//form
<tr>
  <td><input name="name" type="text" class="span2" placeholder="Name..."></td>
  <td><textarea name="description" class="autoexpand span7" rows="1"     placeholder="Description..."></textarea>
  </td>
</tr>

//receiving action:
val task = taskForm.bindFromRequest.get

Но теперь я хочу представить несколько объектов типа задачи, например, например:

<tr>
  <td><input name="name[0]" type="text" class="span2" placeholder="Name..."></td>
  <td><textarea name="description[0]" class="autoexpand span7" rows="1" placeholder="Description..."></textarea></td>                   
</tr>
<tr>
  <td><input name="name[1]" type="text" class="span2" placeholder="Name..."></td>
  <td><textarea name="description[1]" class="autoexpand span7" rows="1" placeholder="Description..."></textarea></td>                   
</tr> 

Делать taskForm.bindFromRequest.get сейчас терпит неудачу.

Кто-нибудь придумал решение этой проблемы? Или вы справляетесь с такой ситуацией совершенно иначе?

Ваш Ответ

2   ответа
1

страница:

Repeated values

A form mapping can also define repeated values:

case class User(name: String, emails: List[String])

val userForm = Form(
  mapping(
    "name" -> text,
    "emails" -> list(text)
  )(User.apply, User.unapply)
)

When you are using repeated data like this, the form values sent by the browser must be named emails[0], emails[1], emails[2], etc.

Error: User Rate Limit Exceeded
17

спасибо, что подсказали мне снова взглянуть на документы, я уже видел их, но никогда не мог придумать, как их объединить, чтобы это работало. Я думаю, это потому, что я абсолютный новичок. Тем не менее, я получил его после некоторого времени, вот мое решение:

//classes
case class Task(name: String, description: String)
case class Tasks(tasks: List[Task])

val taskForm: Form[Tasks] = Form(
  mapping(
  "tasks" -> list(mapping(
    "name" -> text,
    "description" -> text
  )(Task.apply)(Task.unapply))
)(Tasks.apply)(Tasks.unapply)
)

//form
<tr>
  <td><input name="tasks[0].name" type="text" class="span2" placeholder="Name..."></td>
  <td><textarea name="tasks[0].description" class="autoexpand span7" rows="1" placeholder="Description..."></textarea></td>                   
</tr>
<tr>
  <td><input name="tasks[1].name" type="text" class="span2" placeholder="Name..."></td>
  <td><textarea name="tasks[1].description" class="autoexpand span7" rows="1" placeholder="Description..."></textarea></td>                   
</tr>

И наконец сделайте:

val tasks = taskForm.bindFromRequest.get

чтобы получить список задач.

Error: User Rate Limit Exceededlist()Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded

Похожие вопросы