Play framework + scala:处理复选框列表和选定的项目

时间:2018-02-06 13:23:39

标签: scala checkbox playframework mapping helpers

我有一个我想要显示为复选框的项目列表,我有一个用户实际选择的项目列表以及我已存储在数据库中的项目。所以我需要的是显示所有项目,但只标记选中所选项目:

  • [] item1
  • [] item2
  • [X]项目3
  • [X] ITEM4

这是我的映射:

def formMapping: Mapping[Data] = {
        mapping(
            "selectedItems" -> play.api.data.Forms.list(String)
        )(Data.apply)(Data.unapply)
    }

我的HTML:

@(theForm: Form[DataForView])

@for((itemValue, itemName) <- allItems) {
        <input type="checkbox" name="selectedItems" value="@itemValue"/>@itemName<br/>
    }

我使用名称&#34; selectedItems&#34;所以它映射到表单域。我虽然使用@checkbox助手,但后来我只会看到selectedItems,而不是所有项目。

我考虑过其他选项,例如,消除&#34; selectedItems&#34;并列出所有具有布尔值的项目,指示是否选中它。但这意味着我必须使用selectedItems交叉项目,我希望有更好的方法。

有什么想法吗?

更新

我尝试过这种方法:

@for(item <- allItems) {
    @if(theForm("selected").contains(@item.value)) {
        <input type="checkbox" name="selected" value="@item.value" CHECKED/>@item.name<br/>
    } else {
        <input type="checkbox" name="selected" value="@item.value"/>@item.name<br/>
    }
}

但是,形式(&#34;选择&#34;)类似于选择[0],选择[1],...我无法将其与表单字段匹配,表单字段是字符串列表

1 个答案:

答案 0 :(得分:1)

我能做到这一点:

@(theForm: Form[DataForView], selectedItems: Set[String])

@for((itemValue, itemName) <- allItems) {
    @if(selectedItems.contains(@itemValue)) {
        <input type="checkbox" name="selectedItems" value="@itemValue" CHECKED/>@itemName<br/>
    } else {
        <input type="checkbox" name="selectedItems" value="@itemValue"/>@itemName<br/>
    }
}

selectedItems是所选元素的集合。