- - PR -
JSFでselectItemsがうまく動かない
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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が何も無くなるだけなので、 他の場所に問題があるわけではないと思っています。 すみませんがよろしくお願いいたします | ||||||||||||
|
投稿日時: 2006-02-21 16:22
<f:selectOneItems value="#indxBean.grpname}"/> を
<f:selectItems value="#{indxBean.grpname}"/> とすればいいのでは? | ||||||||||||
|
投稿日時: 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で反映されなくて悩んでいますが、もう少し悩んで見ます ありがとうございました。 | ||||||||||||
|
投稿日時: 2006-02-21 19:03
一瞬幸せになれた気がしたのですが、気のせいでした(泣)
基本に戻ってtdldocsをきっちり読み直してみました。 valueのTypeがStringになっているのですがここがいけないのでしょうか? しかし、String一つをもらっても意味がないような・・・ どうやったらItemをもたせられるのでしょうか? ※ しかしJSFの情報はWebでは拾い難いですね・・ 一冊は本をそろえたほうが良いものでしょうか・・? | ||||||||||||
|
投稿日時: 2006-02-22 13:37
これは"#{indxBean.grpname}"のような文字列であることを言っているだけなので,問題ありません.
実際のソースと,起きている現象をもう少し正確に報告していただけませんか.
Yahoo!グループjsf-jp http://groups.yahoo.co.jp/group/jsf-jp/ のブリーフケースにTipsを置いてありますので,お役に立てれば幸いです. | ||||||||||||
|
投稿日時: 2006-02-22 13:39
indxBean.grpname の内容が、javax.faces.model.SelectItem や、
Map などになっていないとかでは? #どうでもいいですが、grpname、slctgrp、indxBean というような #意味不明の省略はやめた方がよろしいかと。 #こういう省略をしてどんなメリットがあるのか、さっぱりわかりません。 | ||||||||||||
|
投稿日時: 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文字画面にプログラムしていたときの癖で省略してます。 | ||||||||||||
|
投稿日時: 2006-02-22 14:53
indexBean.grpname は、ArrayList型でいいのですが、そこに格納している 要素は、何型になっていますか?みたところ、単なるString のようですが。 <h:selectOneMenu> ということは、最終的なHTML は、 <select>タグになるわけですよね。 <select>タグということは、
のように、実際の値と表示用の値(ラベル)の2種類の値が 必要になりますね。 つまり、Map のように、キーとラベルを持つオブジェクトが 必要となるわけです。 JSF で用意されているのが、javax.faces.model.SelectItem です。 これでもいいし、Map でもOK です。 |