2009年1月29日木曜日

Teeda(Seasar2) のSelectアイテム

Selectタグに項目を埋めるためにListでフィールドを作成したが、意味不明のエラー。

public List<Map<String, String>> locidItems;


* text

java.lang.NullPointerException: text
at org.seasar.framework.util.AssertionUtil#assertNotNull (AssertionUtil.java#41)
at org.seasar.teeda.core.context.html.HtmlResponseWriter#writeText (HtmlResponseWriter.java#152)
at org.seasar.teeda.core.render.html.HtmlSelectManyListboxRenderer#renderSelectItems (HtmlSelectManyListboxRenderer.java#179)
at org.seasar.teeda.core.render.html.HtmlSelectManyListboxRenderer#encodeHtmlSelectListboxEnd (HtmlSelectManyListboxRenderer.java#91)
at org.seasar.teeda.core.render.html.HtmlSelectManyListboxRenderer#encodeEnd (HtmlSelectManyListboxRenderer.java#68)
at javax.faces.component.UIComponentBase#encodeEnd (UIComponentBase.java#348)
at org.seasar.teeda.core.util.RendererUtil#renderChild (RendererUtil.java#327)
以下省略


ここにも同じ経験の人がいて、解決も乗っていた。(解決を見る前に自分でも解決したが、、、)

 サンプルがいまいち分かりにくかったのだが、ListならDtoでよく、Mapなら単独のMapでよかった。
それを、MapのListにし、各Mapには put(labelStr, keyStr) の形でデータを入れていたのだが、MapのListの場合はDtoと同じ扱いになり、"label","value"という名称のフィールドとして扱えることが必須であった。
 つまり、今回の場合だと、Listに追加するMapには、以下のようにデータを入れる必要があった。
map.put("value",keyStr);
map.put("label",labelStr);

0 件のコメント: