我在游戏2.1.3中与@select helper挣扎。
我想用一个用户列表进行简单的选择。 select应该将值设置为用户的id,该选项应该具有用户的名称。 我正在使用MongoDB模块,因此它们都是字符串。 这就是我所拥有的:
@select(createForm("userId"),
options = User.options(),
'class -> "form-control",
'_default -> "--- Select ---",
'_label -> "User assigned",
'_showConstraints -> false
)
用户模型中的和options():
public static Seq<java.util.Map.Entry<String,String>> options() {
Seq<java.util.Map.Entry<String, String>> map = new Seq<java.util.Map.Entry<String,String>>();
for (User user : User.coll.find().toArray()) {
//seq.add(new AbstractMap.SimpleEntry<String, String>(user.id, user.name));
}
return map;
}
错误是:
type mismatch; found : Seq[java.util.Map.Entry[String,String]] required: Seq[(String, String)]
如何定义这样的一对字符串? (String,String),还是有一种更简单的方法可以在没有循环的情况下做到这一点?
谢谢
答案 0 :(得分:2)
据我所知,Java中的(String, String)
是scala.Tuple2<String, String>
,因此您的Seq应该看起来像Seq<Tuple2<String, String>>
您可以使用play.libs.Scala
帮助程序在Java和Scala类型之间执行转换:
List<Tuple2<String, String>> values = new ArrayList<>();
for (User user : User.coll.find().toArray()) {
values.add(Scala.Tuple("asd", "zxc"));
}
return Scala.toSeq(values);
答案 1 :(得分:0)
谢谢@serejja的回答。
我找到了获得相同结果的另一种方法,即使用选项助手,因为我喜欢尽可能少地使用scala。*包。
public static java.util.Map<String,String> options() {
java.util.Map<String, String> map = new HashMap<String, String>();
for (User user : User.coll.find().toArray()) {
map.put(user.id, user.name);
}
}
然后在scala中:
@select(createForm("userId"),
options = options(User.options()),
'class -> "form-control",
'_default -> "--- Select ---",
'_label -> "User assigned",
'_showConstraints -> false
)
请注意 options = options(User.options())部分。
但是,我认为@ serejja的方式是更“原生”的Scala解决方案。所以我把他作为答案。
再次感谢你。