Play提供了Form、Field等表单类型,帮助开发者节省了很多表单处理方面的负担,但是有些功能目前不是很灵活,正如本文即将讨论的@helper.repeat函数,该函数目前无法让开发者直接访问元素索引,本文介绍两种方法,可以临时解决这个问题。
假设我们的form定义如下:
val userForm = Form[User]( mapping( "_id" -> text, "name" -> nonEmptyText, "emails" -> list(nonEmptyText) )(User.apply)(User.unapply) )
其中emails属性是List类型。
1. Field中如何存放List类型?
List类型在Field中是被打散存放的,所以无法直接从Field中取出该List实例,例如对于:
user.emails = List("[email protected]", "[email protected]", "[email protected]")
直接调用userForm("emails").value返回None,正确的访问方式是:
userForm("emails")("[0]").value userForm("emails")("[1]").value userForm("emails")("[2]").value
或者
userForm("emails[0]").value userForm("emails[1]").value userForm("emails[2]").value
OK,背景知识介绍完毕,下面进入正题。
2. 使用Filed.indexes获取索引信息
对于存放List属性的Field实例,其indexes属性将会返回其索引列表,类型为List[Int],代码如下:
@for(i <- userForm("emails").indexes){ @userForm("emails")("[" + i + "]").value }
3. 利用Field.name获取索引信息
@helper.repeat(userForm("emails"), min=0 ){ field => @field.name }
输出信息为:
emails[0] emails[1] emails[2]
第2钟方式不够灵活,需要手工从字符串中解析出索引,建议使用第1种方式。
欢迎光临我们的小站:
奇智智能客服机平台:http://www.smartnlp.cn
时间: 2024-08-28 03:06:37