- PR -

JSFでselectItemsがうまく動かない

投稿者投稿内容
まさ
会議室デビュー日: 2002/04/18
投稿数: 16
投稿日時: 2006-02-21 14:36
初めて質問させていただきます

---JSP-----
<h:selectOneMenu id="slctgrp" value="#{welcomeBean.slctgrp}"?
<f:selectOneItems value="#indxBean.grpname}"/>
</h:selectOneMenu>

---indexBean----
Collection grpname;


public Collection getGrpname(){
return this.grpname;
}

grpnameはデータベースから読み出してCollectionに格納しています
最初はArrayList型で行ってみたりしたのですが、結果はJSPでコンパイルエラーになります。

ちなみに
<f:selectOneItems value="#indxBean.grpname}"/>
の行を外すとコンパイルができ、ItemBoxのItemが何も無くなるだけなので、
他の場所に問題があるわけではないと思っています。

すみませんがよろしくお願いいたします
でるびすた
常連さん
会議室デビュー日: 2005/06/15
投稿数: 22
投稿日時: 2006-02-21 16:22
<f:selectOneItems value="#indxBean.grpname}"/> を
<f:selectItems value="#{indxBean.grpname}"/>
とすればいいのでは?
まさ
会議室デビュー日: 2002/04/18
投稿数: 16
投稿日時: 2006-02-21 16:35
>NIQSさん
返信ありがとうございます
この辺は自己解決した?っぽいです

ネットにつながっていないマシンの方で開発しているので写し間違えていました。
正確にはNIQSさんのおっしゃるような書き方をしていました。

恥ずかしながら

<prorerty-name>grpname</property-name>
<prorerty-class>java.util.ArrayList</property-name> <-ここは適時変更中
<list-entries></list-entries>

こちらの設定をしていなかったのが直接の原因でした。

今度は設定したはずのListがJSPで反映されなくて悩んでいますが、もう少し悩んで見ます

ありがとうございました。
まさ
会議室デビュー日: 2002/04/18
投稿数: 16
投稿日時: 2006-02-21 19:03
一瞬幸せになれた気がしたのですが、気のせいでした(泣)

基本に戻ってtdldocsをきっちり読み直してみました。
valueのTypeがStringになっているのですがここがいけないのでしょうか?
しかし、String一つをもらっても意味がないような・・・

どうやったらItemをもたせられるのでしょうか?


しかしJSFの情報はWebでは拾い難いですね・・
一冊は本をそろえたほうが良いものでしょうか・・?
よしだひろゆき
大ベテラン
会議室デビュー日: 2004/11/22
投稿数: 141
投稿日時: 2006-02-22 13:37
引用:
基本に戻ってtdldocsをきっちり読み直してみました。
valueのTypeがStringになっているのですがここがいけないのでしょうか?


これは"#{indxBean.grpname}"のような文字列であることを言っているだけなので,問題ありません.

引用:
どうやったらItemをもたせられるのでしょうか?


実際のソースと,起きている現象をもう少し正確に報告していただけませんか.

引用:
しかしJSFの情報はWebでは拾い難いですね・・
一冊は本をそろえたほうが良いものでしょうか・・?


Yahoo!グループjsf-jp
http://groups.yahoo.co.jp/group/jsf-jp/
のブリーフケースにTipsを置いてありますので,お役に立てれば幸いです.
flatline
大ベテラン
会議室デビュー日: 2005/09/22
投稿数: 102
投稿日時: 2006-02-22 13:39
indxBean.grpname の内容が、javax.faces.model.SelectItem や、
Map などになっていないとかでは?

#どうでもいいですが、grpname、slctgrp、indxBean というような
#意味不明の省略はやめた方がよろしいかと。
#こういう省略をしてどんなメリットがあるのか、さっぱりわかりません。
まさ
会議室デビュー日: 2002/04/18
投稿数: 16
投稿日時: 2006-02-22 14:22
>よしだひろゆきさん

valueがString型なのは了解しました

>実際のソースと,起きている現象をもう少し正確に報告していただけませんか.

==発生するエラー============
致命的: サーブレット jsp のServlet.service()が例外を投げました
java.lang.ClassCastException: java.lang.String
at com.sun.faces.renderkit.html_basic.MenuRenderer.getOptionNumber(MenuRenderer.java:465)
==発生するエラー============

==JSP============
<h:selectOneMenu id="slctedgrp" value="#{welcomeBean.slctedgrp}">
<f:selectItems value="#{indexBean.grpname}"/>
</h:selectOneMenu>
==JSP============

==直前でSysoutしたgrpnameの値============
grpname = [Test1, Test2, Test3]
==直前でSysoutしたgrpnameの値============

==faces-config============
<managed-bean>
<managed-bean-name>indexBean</managed-bean-name>
<managed-bean-class>web.beans.indexBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>grpname</property-name>
<property-class>java.util.ArrayList</property-class>

<list-entries/>
</managed-property>
</managed-bean>
==faces-config============

grpnameは直前の操作(ログインする操作)でログインがOKならばindexBeanに
grpnameをデータベースセットしてあります。
それをsessionスコープにしてあるので、そのまま次の画面でSelectionBOXの
アイテムに使用するようにして、アクセスすると上記のようなエラーが出ます。

>flatlineさん

>indxBean.grpname の内容が、javax.faces.model.SelectItem や、
>Map などになっていないとかでは?

上記のようにArrayList型にしています。Map型を使うものでしょうか?
この当たりが良くわからなく、試行錯誤しています。

>#どうでもいいですが、grpname、slctgrp、indxBean というような
>#意味不明の省略はやめた方がよろしいかと。
>#こういう省略をしてどんなメリットがあるのか、さっぱりわかりません。

業務で作成しているものではなく、趣味+αで自分ひとりでわかればいい命名
なので、適当にやってます。Javaのお作法にはそぐわないかもしれませんが・・
昔のCコード80文字画面にプログラムしていたときの癖で省略してます。

flatline
大ベテラン
会議室デビュー日: 2005/09/22
投稿数: 102
投稿日時: 2006-02-22 14:53
引用:

上記のようにArrayList型にしています。Map型を使うものでしょうか?
この当たりが良くわからなく、試行錯誤しています。



indexBean.grpname は、ArrayList型でいいのですが、そこに格納している
要素は、何型になっていますか?みたところ、単なるString のようですが。

 <h:selectOneMenu> ということは、最終的なHTML は、
<select>タグになるわけですよね。
 <select>タグということは、
コード:
<select>
  <option value="1">hoge</option>
  <option value="2">hoge2</option>
</select>


 のように、実際の値と表示用の値(ラベル)の2種類の値が
必要になりますね。
 つまり、Map のように、キーとラベルを持つオブジェクトが
必要となるわけです。
 JSF で用意されているのが、javax.faces.model.SelectItem です。
これでもいいし、Map でもOK です。

スキルアップ/キャリアアップ(JOB@IT)