Приведенные ниже selectItems подаются из карты с областью действия сеанса. Когда пользователь нажимает кнопку «Отправить», предполагается, что поле даты устанавливается в компоненте поддержки запроса с областью действия и отображается на странице.
<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'.
Я не уверен, почему эта ошибка получена. Я попытался установить конвертер javax.faces.DateTime в теге selectOneMenu, но затем получил еще более загадочную ошибку проверки.
Нашел сообщение, в котором предлагается проверить, доступен ли метод equal(), и что выбор элемента находится в раскрывающемся списке, оба из которых должны быть истинными в этом случае.
Один обходной путь, который я могу придумать, - это изменить мою карту на строку с ключом, где даты сохраняются в виде строк. Но это кажется перебором.
Любые предложения о том, как заставить эту настройку работать?
Фасоль поддержки:
@Named
@RequestScoped
public class DropDown {
private Date selectedDate;
public Date getSelectedDate() {
return selectedDate;
}
public void setSelectedDate(Date selectedDate) {
this.selectedDate = selectedDate;
}
}
Компонент карты:
@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;
}
}
Спасибо!