Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Jsf selectOne : validation problem


Автор: v2v 10.5.2008, 14:26
Имеется jsf форма, но форме выпадающий список h:selectOneMenu . 
Список должен состоять из элементов моего класса AA.
Список составляю из элементов класса javax.faces.model.SelectItem (с помощью f:selectItems), в конструктор которого и передаю экземпляры класса АА.  
Ещё написал дополнительный конвертор из AA в String и Наоборот.

Итак страничка выглядит следующим образом
Код

<h:selectOneMenu id="aa_id" required="true"  value="#{manager.aa}"  converter="aaConverter">
            <f:selectItems value="#{manager.aa_list}"/>
        </h:selectOneMenu> 
// manager.aa - тип АА
// manager.aa_list - тип List<SelectItem(AA)>

при сабмите формы появляется сообщение 
"aa_id" Значение не является правильной опцией.

Насколько я понял, это значит что тип того что я выбрал не совпадает с типом selectOneMenu value.
Как такое поправить?

Автор: Maksym 10.5.2008, 15:33
v2v
А как выглядит твой конвертер? Я когда-то поднимал http://forum.vingrad.ru/index.php?showtopic=141445&view=findpost&p=1066489, но так ничего и не добился, заворкэраундил как-то и дальше пошел.

Автор: v2v 10.5.2008, 15:46
аналогичный твоему. причём всё возвращает как я написал - правильно.
Код

public class SimpleConverter implements Converter {

    public AA getAsObject(FacesContext arg0, UIComponent arg1, String arg2)
            throws ConverterException {
// AA aa <- arg2
        return aa;
    }

    public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2)
            throws ConverterException {
// String s <- arg2
        return s;
    }
}


я так подозреваю, в твоём случае конвертор не использовался, ибо ты задаёшь конкретня: что отображать на экран(срока), а что есть значение выбраной строки (объект).
Код

 <f:selectItem itemLabel="1" itemValue="1"  />   

а у меня всё это достаётся из value= ...

Автор: Maksym 10.5.2008, 15:57
v2v
Это у меня упрощенный пример был. В реальности использовался f:selectItems.
Ты в свой конвертер точки ставил и смотрел когда в него управление попадает?

Автор: v2v 10.5.2008, 16:02
Цитата(Maksym @  10.5.2008,  15:57 Найти цитируемый пост)

Ты в свой конвертер точки ставил и смотрел когда в него управление попадает? 

функция getAsString вызывается, когда запрашиваю страницу.
функция getAsObject вызывается, когда "сабмичу" страницу.

Цитата(v2v @  10.5.2008,  14:26 Найти цитируемый пост)

"aa_id" Значение не является правильной опцией.

есть какие то идеи поповоду этого сообщения?

Автор: ivg 10.5.2008, 16:06
А конвертор aaConverter зарегистрирован в faces-config.xml?
Покажите полный листинг класса AA(equals() и toString()?).
У меня была аналогичная проблема. Причина была в том что на форме имелся некий элемент с immediate="true", в коде action или actionListener которого список SelectItems (в вашем случае manager.aa_list - тип List<SelectItem(AA)) перестраивался. Проверьте этот момент.
manager bean scope?

Автор: v2v 10.5.2008, 16:13
блин!
equal() !!
я его не переопределил ((.
спасибо

Автор: ivg 10.5.2008, 16:13
Цитата(v2v @  10.5.2008,  19:02 Найти цитируемый пост)
есть какие то идеи поповоду этого сообщения?

Код класса компонента <h:selectOneMenu ...> при "валидации" значения проверяет наличие его в списке manager.aa_list, если не находит, выдаёт это сообщение.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)