我有一个以下形式的枚举:
object MatchFilterType extends Enumeration {
type MatchFilterType = Value
val gt = Value("gt")
val lt = Value("lt")
val eq = Value("eq")
}
尝试在我的控制器中创建一个表单 val:
case class SearchRequest(mft: MatchFilterType, queryText: String, locations: List[String])
val searchForm: Form[SearchRequest] = Form(
mapping(
"mft" -> ????????,
"queryText" -> nonEmptyText,
"locations" -> list(text)
)(SearchRequest.apply)(SearchRequest.unapply)
)
我在这个项目中使用 play 2.6.x。
如何在 Form val 中映射我的枚举?
首先创建一个隐式的Formatter
使用枚举withName
方法接受一个字符串并将其转换为枚举:
implicit def matchFilterFormat: Formatter[MatchFilterType] = new Formatter[MatchFilterType] {
override def bind(key: String, data: Map[String, String]) =
data.get(key)
.map(MatchFilterType.withName(_))
.toRight(Seq(FormError(key, "error.required", Nil)))
override def unbind(key: String, value: MatchFilterType) =
Map(key -> value.toString)
}
然后使用Forms.of
创建一个FieldMapping
:
Form(...,
"mft" -> Forms.of[MatchFilterType],
...)
请记住MatchFilterType.withName(_)
如果字符串不是枚举成员,将抛出异常,因此更新bind
方法来根据需要处理这个问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)