2012-01-23 22 views
0

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

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

Bean内のコードは次のようである:

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

すべて:私は@PostConstructのinitメソッドでインスタンス化してい

private int day; 
private List<Integer>days; 

うまく動作しますが、値は「1日」で表示され、「日を選択」では表示されません。私は上記のタグのさまざまなバリエーションを試みたが、何も動作しません。私は何が欠けていますか?

EDITは:これは正常に動作します

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

示すよう「年を選択」:私はまた、このように、2012年から始まるのと同じ方法ではなく、ループで初期化された年の表示と同様のウィジェットを、持っています期待される。したがって、インスタンス化ループの問題は1から始まりますか?もしそうなら、回避策は何ですか?

+0

は、あなたが使用しているprimefacesバージョンのバグのようですが、安定版を使用してみてください。新しいバージョン... http://www.primefaces.org/showcase/ui/selectOneMenu.jsf – Daniel

+0

あなたが使用しているJSFとサーバーのバージョン?私はJSF 2.1(2.1.1.FCS)とTomcat 7を試してみましたが、最初の値を 'Select Day'と表示しています。@ Danielあなたはどうやってそれがプライムフェイスであると結論づけましたか? –

+1

user458248私はmyfaces 2.1.4をtomcat 7.と使用しています。ダニエル、それはこのページのprimefaceではありません。私はいくつかの情報を追加する質問を更新しています。 – Herzog

答えて

1

コードはこれまでのところよく見えます。説明した「問題」は、項目値が正確に<h:selectOneMenu value>であらかじめ初期化されている場合に発生します。あなたの場合、ほとんどの場合dayの値をコードのどこかの1に設定している可能性があります。例えば、

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

又は

public Bean() { 
    setDay(1); 
} 

エトセトラ。


更新:私は両方の編集用ページを使用して、新しいオークションを入力していたので、私はそれをこのように持っていたし、私はそのことを確認したかった

:あなたのコメントどおりページに戻って新しいオークションに入ると、別のオークションが編集された後、編集されたオークションの値が削除されます。しかしそれがポイントのほかに、私はそれをどうするかを考え出すでしょう。

セッションスコープの代わりにビュースコープにBeanを配置します。セッションスコープは入力フォームのスコープが間違っています。これは、ログインしているユーザやその設定など、セッション指定データのみに使用する必要があります。 Communication in JSF2 - Managed bean scopesも参照してください。

+0

ええ、私はそれを1に設定しました。それを0に設定すると、私は必要なものを行います。 ViewScopedについては、どのように検証するのですか?たとえば、ユーザーが過去にオークションを開始しようとすると、それを報告する必要があります。ビュースコープを使用するとフィールドが再初期化され、ユーザーは最初からフォームに記入する必要がありますが、これは私が望むものではありません。解決策はありますか? (ビュースコープを使用してセッション中のメモリを減らすことが大好きです。) – Herzog

+1

アクションスコープ内で 'null'または' void'を返す限り、ビュースコープのBeanはすべてのポストバックで再初期化されるべきではありません。しかし、[bug 1492](http://java.net/jira/browse/JAVASERVERFACES-1492)のため、ビューのスコープ付きBeanは、そのプロパティの1つをタグハンドラー属性にバインドするとそのようになります。 [この記事](http://balusc.blogspot.com/2011/09/communication-in-jsf-20.html#ViewScopedFailsInTagHandlers)をチェックし、タグハンドラを削除/置き換えてコードを修正してください。 – BalusC

+0

ありがとう、BalusC。私は戻り値をnullに変更し、今ViewScopedとして美しく動作します。私はこれがアプリケーションのメモリ要求を小さくすると正しく仮定していますか?ああ、JSF開発者をまだ私のうちに作るでしょう:) – Herzog

関連する問題