以下の selectItems は、Session Scoped Map から供給されます。ユーザーが送信ボタンをクリックすると、Request Scoped バッキング Bean に日付フィールドが設定され、ページに表示されます。
<h:selectOneMenu value="#{dropDown.selectedDate}">
<f:selectItems value="#{mapValues.dateMap.entrySet()}" var="entry" itemLabel="#{entry.value}" itemValue="#{entry.key}" />
</h:selectOneMenu>
<h:commandButton value="Submit" />
You selected Date #{dropDown.selectedDate}
ただし、次の変換エラーが表示されます。
Conversion Error setting value 'Wed Dec 26 15:09:32 EST 2012' for 'null Converter'.
このエラーが発生する理由がわかりません。selectOneMenu タグに javax.faces.DateTime コンバーターを設定しようとしましたが、さらに不可解な検証エラーが発生しました。
equal() メソッドが使用可能かどうか、および項目の選択がドロップダウンにあるかどうかを確認することを提案する投稿を見つけました。この場合、どちらも真である必要があります。
私が考えることができる 1 つの回避策は、日付が文字列として保存される場所で、キーが文字列になるようにマップを変更することです。しかし、それはやり過ぎのようです。
この設定を機能させる方法について何か提案はありますか?
バッキング Bean:
@Named
@RequestScoped
public class DropDown {
private Date selectedDate;
public Date getSelectedDate() {
return selectedDate;
}
public void setSelectedDate(Date selectedDate) {
this.selectedDate = selectedDate;
}
}
マップ Bean:
@Named
@SessionScoped
public class MapValues implements Serializable {
private Map<Date, String> dateMap;
@PostConstruct
public void init() {
dateMap = new LinkedHashMap<Date, String>();
dateMap.put(new Date(), "DATEVALUE1");
}
public Map<Date, String> getDateMap() {
return dateMap;
}
public void setDateMap(Map<Date, String> dateMap) {
this.dateMap = dateMap;
}
}
ありがとう!