0

JSF 2アプリケーションでselectOneMenuを使用して、ユーザーが1か月の日を選択できるようにしています。なんらかの理由で「SelectDay」というラベルが表示されません。これは私がしていることです:

<h:selectOneMenu id="startDay" value="#{bean.day}">       
    <f:selectItem itemLabel="Select Day" itemValue=""/>
    <f:selectItems value="#{bean.days}"/>
</h:selectOneMenu>

Beanのコードは次のようになります。

private int day;
private List<Integer>days;

@PostConstructinitメソッドでインスタンス化しています。

days = new LinkedList<Integer>();
for(int i=1; i<=31; i++) {
    days.add(i);            
}

すべて正常に動作しますが、値は「SelectDay」ではなく「1」に表示されます。上記のタグでさまざまなバリエーションを試しましたが、何も機能しません。私は何が欠けていますか?

編集:私は年を表示する同様のウィジェットも持っています。これは同じ方法で初期化されますが、ループは2012年から始まります。次のようになります。

years = new LinkedList<Integer>();
for(int i=2012; i<=2020; i++) {
    years.add(i);           
}

これは正常に機能し、期待どおりに「SelectYear」が表示されます。では、インスタンス化ループの問題は1から始まりますか?もしそうなら、回避策は何ですか?

4

1 に答える 1

1

これまでのところ、コードは正常に見えます。<h:selectOneMenu value>説明した「問題」は、を正確にアイテム値で事前初期化した場合に発生します。あなたの場合、ほとんどの場合、の値を実際のコードのどこかに設定しdayます1。例えば、

private int day = 1; // Instead of default 0.

また

public Bean() {
    setDay(1);
}

その他。


更新:あなたのコメントに従って:

このページを編集と新しいオークションへの参加の両方に使用していて、ページに戻って新しいオークションに参加するときに、別のオークションが編集されたら、編集済みのオークションを削除するようにしたかったので、このようにしました。オークションの価値。しかし、それは要点を超えて、私はそれをどうするかを理解します。

Beanをセッションスコープではなくビュースコープに配置します。セッションスコープは、入力フォームに対して間違ったスコープです。ログインしたユーザーやその設定など、セッション固有のデータにのみ使用する必要があります。JSF2での通信-マネージドBeanスコープも参照してください。

于 2012-01-23T16:37:39.930 に答える