填写模型列表

时间:2018-02-05 10:59:35

标签: java scala playframework

我尝试显示一个从模型中获取选项的选择字段。

我尝试按照以下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]]))

我不知道我做错了什么。

2 个答案:

答案 0 :(得分:2)

documentation告诉helper.select想要Seq[(String, String)]作为options - 参数。

在您的代码中,modelForm("options")是对apply(name: String)上方法Form的调用,该方法返回Form.Fielddoc)。班级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())

让我相信它不会在那个阶段期待一张地图。