相关推荐:Play-Scala开发技巧 - 关闭X-Forwarded-For解析

1. 为什么要关闭X-Forwarded-For解析? 某些用户可能会使用透明代理访问你的网站,透明代理在转发请求的时候会通过X-Forwarded-For请求头带上真实的请求IP地址,默认情况下,Play会解析这个请求头并赋值给request.remoteAddress,进而导致在Action中通

Play提供了Form、Field等表单类型,帮助开发者节省了很多表单处理方面的负担,但是有些功能目前不是很灵活,正如本文即将讨论的@helper.repeat函数,该函数目前无法让开发者直接访问元素索引,本文介绍两种方法,可以临时解决这个问题。

假设我们的form定义如下:case class User(_id: String, name: String, emails: List[String])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("a@smartnlp.cn", "b@smartnlp.cn", "c@smartnlp.cn")直接调用userForm("emails").value返回None,正确的访问方式是:

userForm("emails")("[0]").valueuserForm("emails")("[1]").valueuserForm("emails")("[2]").value或者userForm("emails[0]").valueuserForm("emails[1]").valueuserForm("emails[2]").valueOK,背景知识介绍完毕,下面进入正题。 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]4. 利用Form.value获取绑定的数据对象@for((email, i) <- userForm.value.get.emails.zipWithIndex){

@i - @email <br/>}第1种方法可以配合@import helper._下的工具函数使用;第2钟方式不够灵活,需要手工从字符串中解析出索引; 第3种方法虽然简单,但是无法配合@import helper._下工具函数使用。欢迎光临我们的小站:奇智智能客服机平台:http://www.smartnlp.cn

相关推荐:Play-Scala开发技巧 - 关闭X-Forwarded-For解析

1. 为什么要关闭X-Forwarded-For解析? 某些用户可能会使用透明代理访问你的网站,透明代理在转发请求的时候会通过X-Forwarded-For请求头带上真实的请求IP地址,默认情况下,Play会解析这个请求头并赋值给request.remoteAddress,进而导致在Action中通

快照源:http://my.oschina.net/joymufeng/blog/524344