我尝试显示一个从模型中获取选项的选择字段。
我尝试按照以下stackoverflow问题中的描述进行操作:
但我无法让它发挥作用。
鉴于以下模型:
public class Model {
private String field;
private List<String> options
}
和以下观点:
@(modelForm: Form[models.Model])
@helper.select(field = modelForm("field"), options = helper.options(modelForm("options").value()))
apply
的{{1}}方法有一个java.util.List [String]的条目,所以它应该可以使用java字符串列表。
helper.options
有了这个,我只得到以下错误:
def apply(options: java.util.List[String]) = options.asScala.map(v => v -> v)
如果我再将表单字段强制转换为overloaded method value apply with alternatives:
[error] (options: java.util.List[String])scala.collection.mutable.Buffer[(String, String)] <and>
[error] (options: List[String])List[(String, String)] <and>
[error] (options: java.util.Map[String,String])Seq[(String, String)] <and>
[error] (options: Map[String,String])Seq[(String, String)] <and>
[error] (options: (String, String)*)Seq[(String, String)]
[error] cannot be applied to (String)
[error] options = helper.options(modelForm("options").value())
而不是编译时异常,我会得到一个运行时异常:
java.util.List<String>
运行时异常:
@helper.select(field = modelForm("field"), options = helper.options(modelForm("options").value().asInstanceOf[util.List[String]]))
我不知道我做错了什么。
答案 0 :(得分:2)
documentation告诉helper.select
想要Seq[(String, String)]
作为options
- 参数。
在您的代码中,modelForm("options")
是对apply(name: String)
上方法Form
的调用,该方法返回Form.Field
(doc)。班级Form.Field
有一个方法value
,但它返回String
。
String
不是Seq[(String, String)]
。
您必须将Seq[(String, String)]
作为单独的参数传递,或者将其构建到原位。
答案 1 :(得分:1)
您是否尝试过在旋转选择对象中进行映射?
@helper.select(field = modelForm("field"), options = modelForm("options").asScala.map(v => v -> v).value()))
由于这些错误:
[error] (options: (String, String)*)Seq[(String, String)]
[error] cannot be applied to (play.data.Form.Field)
[error] options = helper.options(modelForm("options").value())
让我相信它不会在那个阶段期待一张地图。