1

JSF の selectOneMenu の使用に問題があります。

以下のようなことを試してみましたが、誰もうまくいかないようです...

誰かが私を助けることができますか?

JSP:

<h:selectOneMenu value="#{myBean.listCats.desc}" id="desc">
    <f:selectItems value="#{myBean.selectAllCats}" />
</h:selectOneMenu>

マイビーン:

(...)
    public Collection<SelectItem> selectAllCats() throws (some exceptions...){  
        this.listCats = this.controller().selectAllCats();
        Collection<SelectItem> toReturn = new ArrayList<SelectItem>();  

        for( int i = 0; i<this.listCats.size(); i++){  
          toReturn.add( new SelectItem( this.listCats.get(i).getCod(), this.listCats.get(i).getDesc()));  
        }
        return toReturn;
    }
(...)

もう少し情報:

List<Cats> listCats = new List<Cats>();
//-------------------------------------
class Cats{
    private int cod; // both with getters and setters
    private String desc;
}

前もって感謝します!


編集:

次のエラーが発生し続けることを忘れていました。

'#{myBean.selectAllCats}' プロパティ 'selectAllCats' がタイプ path.to.myBean に見つかりません

4

4 に答える 4

3

'#{myBean.selectAllCats}' プロパティ 'selectAllCats' がタイプ path.to.myBean に見つかりません

プロパティの場合、有効な getter メソッドを提供する必要があります。例外があなたに伝えようとしているので、あなたは何も持っていませんでした。プロパティの有効な getter メソッドは次のselectAllCatsようになります。

public Collection<SelectItem> getSelectAllCats() {
    return selectAllCats;
}

ゲッターでビジネス ジョブを実行することは悪い習慣であることに注意してください。Bean の (ポスト) コンストラクターでそれを行う必要があります。

以下も参照してください。

于 2012-11-14T13:01:24.653 に答える
1
 List<Cats> listCats = new List<Cats>();

 myBean.listCats.desc

リストには というプロパティがありませんdescCatsありますがlistCats一覧です。

ところで:クラス名がグループを表していない限り、クラス名が単数形の場合はより良いです。

于 2012-11-14T12:23:49.357 に答える
0

タグ情報ページを知らなかったので、そこで答えを検索しませんでした。

あなたはこのリンクでそれを見つけることができます: https ://stackoverflow.com/tags/selectonemenu/info

または:

ちなみに、自分で質問した[selectonemenu]タグのタグ情報ページを見たことがありますか?ブラックボックスが表示されるまでマウスでホバーし、情報リンクをクリックします。– BalusC

私が探していた答えは、その情報ページの動的リストセクションにあります。このセクションは、この問題の詳細について以下に引用されています。

動的リスト

バッキングBeanに動的に入力されるリストを表示するために使用できます。javax.faces.model.SelectItemを使用して、アイテム値とラベルのペアを表すことができます。

意見:

<h:form>
     <h:selectOneMenu value="#{bean.selectedItem}">
         <f:selectItem itemValue="#{null}" itemLabel="-- select one --" />
         <f:selectItems value="#{bean.availableItems}" />
     </h:selectOneMenu>
     <h:commandButton value="Submit" action="#{bean.submit}" /> </h:form>

モデル:

private String selectedItem; // +getter +setter private
 List<SelectItem> availableItems; // +getter (no setter necessary)

 @PostConstruct public void init() {
     availableItems = new ArrayList<SelectItem>();
     availableItems.add(new SelectItem("foo", "Foo label"));
     availableItems.add(new SelectItem("bar", "Bar label"));
     availableItems.add(new SelectItem("baz", "Baz label")); 
 }

availableItemsはSelectItem[]にすることもできます。アイテムラベルを省略した場合

したがって、アイテム値をオプション値とオプションラベルの両方として使用でき、代わりにListまたはString[]を使用することもできます。

private String selectedItem; // +getter +setter private List<String>
 availableItems; // +getter (no setter necessary)

 @PostConstruct public void init() {
     availableItems = Arrays.asList("foo", "bar", "baz"); 
 }

ありがとう!

于 2012-11-14T13:04:17.383 に答える
0

方法

public Collection<SelectItem> selectAllCats() throws (some exceptions...)

を返しますが、これはJSF 1.2Collectionではサポートされていません。<h:selectOneMenu>

このメソッドは を返すかList、その符号を次のように書き換える必要があります。MapObject[]

public List<SelectItem> selectAllCats() throws (some exceptions...)

それとは別に、次の行で JSP に関する別の問題に直面します。

<h:selectOneMenu value="#{myBean.listCats.desc}" id="desc">

listCatsListによって構成されCats(名前を に変更する必要がありますCat)、このリストにはメソッドがありませんdesc()。この行も次のように変更する必要があります (必要に応じて変更します。

<h:selectOneMenu value="#{myBean.listCats.get(0).desc}" id="desc">
于 2012-11-14T12:35:04.817 に答える