2013-09-23 41 views
0

我在玩2.1.3中的@select helper。(Play 2.1.3)@select return(String,String)對

我想做一個簡單的選擇用戶列表。選擇應該有值設置爲用戶的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)] 

我如何定義一對這樣的字符串? (字符串,字符串),還是有沒有一個簡單的方法做到這一點沒有循環?

謝謝

回答

2

據我所知,在Java中的(String, String)scala.Tuple2<String, String>,所以你的序列應該看起來像一個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); 
+0

謝謝你,作品像一個魅力 –

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 

注意到選項=選項(User.options())一部分。

但是,我猜@ serejja的方式是一個更「原生」的Scala解決方案。所以我將他視爲答案。

再次感謝您。