2013-10-04 4 views
0

Я пытаюсь создать раскрывающийся список в JSF. Он должен быть заполнен цифрами в пределах допустимого диапазона. Например, если заданный диапазон находится между 5 и 20, чем должны быть выпадающие значения;JSF настройки выпадающего списка

"5, 10 15, 20" 

У меня есть некоторые проблемы. В моем контроллере я создаю нечто подобное и устанавливаю значения с помощью цикла for;

List<Integer> validAmounts OR 
List<String> validAmounts 

Тогда

<myapp:selectRowElem id="autoreloadamount" 
      type="dropdown" selectItems="#{settingsController.validAmounts}"/> 

Я получаю ошибку говоря что-то вроде

itemValue="#{i.value}": String does not have a property 'value' 

Любые идеи?

Также есть ли способ «JSF» установить правильные суммы, но не создать цикл цикла в моем контроллере, чтобы установить список validAmounts?

«myapp: selectRowElem» длинный, но он имеет это для выпадающего меню;

<h:selectOneMenu id="input" value="#{cc.attrs.item}" validatorMessage="#{msg[validatorMsgKey]}"> 
          <f:validateRequired disabled="#{cc.attrs.forceRequired ne 'true'}"/> 
          <f:selectItems value="#{cc.attrs.selectItems}" var="i" itemValue="#{i.value}" itemLabel="#{i.label}" /> 
         </h:selectOneMenu> 
+0

Проблема заключается в коде позади '', который не распознается как часть стандартного API JSF и, следовательно, вероятно, доморощенный или сторонний. Пока вы ничего не рассказываете об этой части, маловероятно, чтобы кто-нибудь мог дать вам ответ. Если я могу сделать дикую догадку, это на самом деле ожидает «Список ». – BalusC

+0

@BalusC Я обновил код – Spring

+0

@BalusC Я coudl заставляю его работать с помощью h: selectOneMenu вместо selectRowElem, но тогда все стили ушли – Spring

ответ

2

Это,

<f:selectItems value="#{cc.attrs.selectItems}" var="i" itemValue="#{i.value}" itemLabel="#{i.label}" /> 

ожидает List<SomeObject>, как #{cc.attrs.selectItems} где каждый SomeObject элемент был назначен в качестве переменной #{i} контура, который, в свою очередь, как ожидается, должны getValue() и getLabel() методы, возвращающие значение элемента и метки, соответственно, ,

Ни Integer, ни String не имеют таких методов получения. Это также точно то, что исключение пытается рассказать вам в случае String. Он не смог найти метод getValue().

Оказывается, что #{cc.attrs.selectItems} ожидает List<SelectItem>, в котором SelectItem является стандартным JSF javax.faces.model.SelectItem объекта which does have those getters.

Таким образом, вы должны объявить и создание списка следующим образом:

List<SelectItem> validAmounts; 

// ... 

validAmounts = new ArrayList<SelectItem>(); 
validAmounts.add(new SelectItem(5)); 
validAmounts.add(new SelectItem(10)); 
validAmounts.add(new SelectItem(15)); 
validAmounts.add(new SelectItem(20)); 

Технически реальная альтернативой является создание пользовательского класса, как SomeObject с теми методами геттерных возвращающихся нужных значений. Но это переосмысление колеса в конце концов функционально просто неуклюжие и поэтому не рекомендуется.


Все это, кстати указывает по крайней мере, 2 проблемы в <portal:selectRowElem> составного компонента, который, по-видимому, разработанные кем-то другим:

  1. <cc:attribute name="selectItems"> отсутствующего атрибут shortDescription, который должен четко объяснить Enduser (вы), какое именно значение оно ожидает. Он должен сказать, что он ожидает List<SelectItem>. Таким образом, вы должны сразу заметить это во время автозаполнения кода или просто взглянуть на документацию тега.

  2. Все эти , itemLabel и itemValue атрибуты являются абсолютно излишними. Все они уже установлены по умолчанию, когда поставляется List<SelectItem>. Это также указывает на то, что разработчик исходного составного компонента понятия не имел, что он делает.

+0

Спасибо! существует ли способ установить ширину выпадающего меню без изменения составного компонента? – Spring

+0

Добро пожаловать. Для новых вопросов просто нажмите кнопку «Спросить вопрос» справа вверху. – BalusC

+0

см. Http://stackoverflow.com/questions/19182887/jsf-how-to-set-dropdown-width – Spring

Смежные вопросы