1

これは私のテーブルのサンプルです

CREATE TABLE elements (
 elementname,
 displaytext
)  

これを渡してコントローラーから表示できるように、jpaを使用してハッシュマップにデータを入力するにはどうすればよいですか?

HashMap<String, String> hm = new HashMap<String, String>();

render(hm);

ビューでは、要素名に基づいて繰り返し表示テキストを取得したいと思います

これがやり過ぎなのか、それとももっと簡単な方法が存在するのか、100%確実ではありません。この記事に出くわした

UPDATE1:Play Frame Work 1.2.4

4

1 に答える 1

8

これにはマップは必要ないと思いますが、要素のリストだけです。私が間違っている場合は、あなたが達成しようとしていることをより明確に説明してください。


最初の解決策

あなたのモデル:

@Entity
public class Element extends Model {
   public String name;
   public String text;
}

コントローラーで:

public static void findElements(){
   List<Element> elements = Element.findAll();
   render(elements);
}

あなたの見解では:

<ul>
#{list items:elements, as:element}
   <li>Name: ${element.name}, Text: ${element.text}</li>
#{/list}
</ul>

2番目の解決策

それ以外の場合は、実際のマップが必要な場合は、上記のモデルを使用してコントローラーにマップを設定できます。

public static void findElements(){
   List<Element> elements = Element.findAll();
   HashMap<String,String> hm= new HashMap<String,String>();
   for(Element el: elements){
      hm.put(el.name, el.text);
   }
   render(hm);
}

見る:

<ul>
#{list items:hm.KeySet(), as:name}
   <li>Name: ${name}, Text: ${elements.get(name)}</li>
#{/list}
</ul>

3 番目の解決策 マップのコンテナーを作成します。

@Entity
public class ElementContainer extends Model {
    @ElementCollection(fetch = FetchType.EAGER)
    @MapKeyColumn(name = "name_key", nullable = false)
    public Map<String, String> hm;
}

コントローラ:

public static void findElements(){
   ElementContainer ec = ElementContainer.find().first();
   Map<String,String> hm = null;
   if(ec!=null)
      hm = ec.hm;
   render(hm);
}
于 2012-09-12T06:37:47.157 に答える