如何使用列表映射呈现表单

dag*_*agb 6 scala playframework-2.0

我有一个带有嵌套映射列表的表单,但在模板中迭代它时遇到问题.表格看起来像这样

val assignmentForm : Form[AssignmentData] = Form(
   "acceptedSign" -> nonEmptyText(),
    mapping("activities" -> list (    
      mapping("activityId" -> optional(text), 
          "activityStatus" -> optional(text)) 
          (ActivityData.apply)(ActivityData.unapply))
    )(AssignmentData.apply)(AssignmentData.unapply)
)
Run Code Online (Sandbox Code Playgroud)

我将此表单传递给模板并尝试迭代这些活动.到目前为止只有编译器错误或Form的完整元数据转储.

这给出了包含活动的完整表单的元数据+数据转储.(LI标签是一个包含输入字段的标签导航器)

@repeat(assignmentForm("activities")) { activity =>
                    <li>@activity("activityId")</li>
                    }
Run Code Online (Sandbox Code Playgroud)

迭代排序的工作(代码运行),但从用户的角度来看它完全无法使用.

我也试过各种for循环,只给我编译错误,说

value map is not a member of play.api.data.Field
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 是否应该可以构建这样一个表单,它是如何完成的?
  2. 我还有哪些其他选项来呈现具有一对多关系的输入表单?

dag*_*agb 1

解决方案就这么简单,navtab.scala.html

@**
* Generate an LI element
*@

@(field: play.api.data.Field)
<li><a href='#@field.id' data-toggle="modal">@field("activityStatus").value</a></li>
Run Code Online (Sandbox Code Playgroud)

然后对模板中的映射集合重复此操作

<ul  id="activities">
    @repeat(assignmentForm("activities"), min=0) { activity =>
        @navtab(activity)
    }
</ul>
Run Code Online (Sandbox Code Playgroud)