我有一个我想要显示为复选框的项目列表,我有一个用户实际选择的项目列表以及我已存储在数据库中的项目。所以我需要的是显示所有项目,但只标记选中所选项目:
这是我的映射:
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],...我无法将其与表单字段匹配,表单字段是字符串列表
答案 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是所选元素的集合。