0

SQLクエリによってデータベースから抽出された値をselectOneMenuコンポーネントに入力したいと考えています。クエリは、selectOneMenu の値として入力したい店舗名のみを返します

で始まるスタックで java.lang.IllegalArgumentException を取得します。

java.lang.IllegalArgumentException  at         com.sun.faces.renderkit.SelectItemsIterator.initializeItems(SelectItemsIterator.java:216)
at com.sun.faces.renderkit.SelectItemsIterator.hasNext(SelectItemsIterator.java:135)
at com.sun.faces.renderkit.html_basic.MenuRenderer.renderOptions(MenuRenderer.java:762)

これは私のxhtmlコードです(これはselectItemsの唯一の使用です):

<h:selectOneMenu id="storeName"   value="#{shoplist.store}">  
   <f:selectItems value="#{buyHistory.stores}" />
</h:selectOneMenu>

これは、buyHistory Bean からのクエリです。

public ResultSet getStores() throws SQLException {
...
PreparedStatement getStores = connection.prepareStatement( 
                "SELECT distinct STORE_NAME  "
                + "FROM BuyingHistory ORDER BY STORE_NAME");
CachedRowSet rowSet = new com.sun.rowset.CachedRowSetImpl();
rowSet.populate(getStores.executeQuery());
return rowSet;
}

私は何を間違っていますか?何らかの方法でresultSetからSelectItem配列/リストに変換する必要がありますか?

4

2 に答える 2

1

何らかの方法でresultSetからSelectItem配列/リストに変換する必要がありますか?

はい、解決策の一つです。ウィキページも参照してh:selectOneMenuください。値が、配列、またはのIllegalArgumentExceptionインスタンスでない場合、 がスローされます。SelectItemIterableMap

java(x).sql最終的に、JSF バッキング Bean には依存関係が完全になくなるはずです。import java(x).sql.Something;つまり、JSF コードに を1 行も含めないでください。それ以外の場合は、いずれにせよ悪い設計です (密結合)。適切な DAO クラスを作成する方法を学びます。

于 2013-08-27T12:31:16.087 に答える