0

我在游戏 2.1.3 中与 @select 助手苦苦挣扎。

我想用用户列表做一个简单的选择。选择应该具有设置为用户 ID 的值,并且选项应该具有用户的名称。我正在使用 MongoDB 模块,所以它们都是字符串。这是我所拥有的:

@select(createForm("userId"),
    options = User.options(),
    'class -> "form-control",
    '_default -> "--- Select ---",
        '_label -> "User assigned",
        '_showConstraints -> false
)

和用户模型中的选项():

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)]

我怎样才能定义一对这样的字符串?(字符串,字符串),或者有没有更简单的方法可以在没有循环的情况下做到这一点?

谢谢你

4

2 回答 2

2

据我所知,(String, String)Java 中的 a 是 a 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);
于 2013-09-23T06:36:41.543 回答
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);
    }
}

然后在斯卡拉:

@select(createForm("userId"),
    options = options(User.options()),
    'class -> "form-control",
    '_default -> "--- Select ---",
    '_label -> "User assigned",
    '_showConstraints -> false

)

注意options = options(User.options())部分。

但是,我猜@serejja 的方式是一种更“原生”的 Scala 解决方案。所以我把他算作答案。

再一次感谢你。

于 2013-09-24T04:43:43.097 回答