JSF selectOneListbox получить label для выбранного значения
От: Аноним  
Дата: 14.06.07 12:01
Оценка:
Как в JSF при выборе из списка selectOneListbox получить label для выбранного значения?

<h:selectOneListbox value="#{bean.resultvalue}"  .....>
 <f:selectItems value="#{bean.valuelist}" />
</h:selectOneListbox> 

где,
String resultvalue;
ArrayList<SelectItem> valuelist;

valuelist.add(new SelectItem("key","value"));


— получаем значение resultvalue (key), как получить для него отображаемое в списке значение value?
Re: JSF selectOneListbox получить label для выбранного значе
От: stenkil  
Дата: 14.06.07 12:10
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Как в JSF при выборе из списка selectOneListbox получить label для выбранного значения?


А>
А><h:selectOneListbox value="#{bean.resultvalue}"  .....>
А> <f:selectItems value="#{bean.valuelist}" />
А></h:selectOneListbox> 

А>где,
А>String resultvalue;
А>ArrayList<SelectItem> valuelist;

А>valuelist.add(new SelectItem("key","value"));    
А>


А>- получаем значение resultvalue (key), как получить для него отображаемое в списке значение value?


Наверно
  String label= null;
  for (SelectItem item: valueList){
    if (item.getValue().equals(resultValue){
      label= item.getLabel();
      break;
      }

только зачем, выбирай удобный key, он ведь Object
Re[2]: JSF selectOneListbox получить label для выбранного зн
От: Аноним  
Дата: 14.06.07 13:32
Оценка:
Здравствуйте, stenkil, Вы писали:

S>только зачем, выбирай удобный key, он ведь Object


Да хотелось бы как-то красивее чем перебор в цикле

Сделал добавление элементов списка так

for ... {

String[] e = new String[] {"key","value"};
valuelist.add(new SelectItem(e,e[1]));
}


стало вылетать исключение при открытии страницы

org.apache.jasper.JasperException: java.lang.String
Re[3]: JSF selectOneListbox получить label для выбранного зн
От: stenkil  
Дата: 14.06.07 14:09
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, stenkil, Вы писали:


А>Да хотелось бы как-то красивее чем перебор в цикле


Так ведь я обращаю твое внимание, что key это Object
Никто не мешает тебе сделать
  new SelectItem("label", "label");

чтобы не перебирать в цикле. Это шутка

Обычно ты получаешь с базы:
  class MyClassEntity{
    Integer id;
    Sring name;
..............
  }

И делай
  for (MyClassEntity item: myEntityClassList){
    valueList.add(new SelectItem(item, item.name);}

В resultValue ты будешь иметь готовый объект. Зачем тебе label, это информация для пользователя. Выбери правильно key
Re[4]: JSF selectOneListbox получить label для выбранного зн
От: Аноним  
Дата: 15.06.07 12:28
Оценка:
S>Так ведь я обращаю твое внимание, что key это Object

Не все так просто оказалось... попытка поставить вместо new SelectItem("key", "label");

new SelectItem(myObject, myObject.label);

закончилась исключением:
Value is no String and component ..................... does not have a Converter

Нашел даже пример где пободный конвертер описан: http://www.crazysquirrel.com/computing/java/jsf/converters.jspx

Если често я припухаю от этого примера — сколько писанины!!! чтобы только получить этот несчастный лебел для выбранного ключа — извращение да и только...
Неужели в JSF нет нормального способа решить вопрос? Или остается только по тупому запрашивать БД?
Re[5]: JSF selectOneListbox получить label для выбранного зн
От: stenkil  
Дата: 15.06.07 12:44
Оценка:
Здравствуйте, Аноним, Вы писали:


А>new SelectItem(myObject, myObject.label);


А>закончилась исключением:

А>Value is no String and component ..................... does not have a Converter

Теперь я не понял, исключение во время создания javax.faces.model.SelectItem ?
Re[6]: JSF selectOneListbox получить label для выбранного зн
От: Аноним  
Дата: 15.06.07 13:24
Оценка:
S>Теперь я не понял, исключение во время создания javax.faces.model.SelectItem ?

Цикл заполнения (....add(new SelectItem(curmyObject,curmyObject.label)...) отрабатывает нормально, после как я понимаю идет отрисовка компонента

<h:selectOneListbox value="#{bean.resultvalue}" .....>
<f:selectItems value="#{bean.valuelist}" />
</h:selectOneListbox>

где
myObject resultvalue;
ArrayList<SelectItem> valuelist;


где и происхожит исключение

SEVERE: Servlet.service() for servlet Faces Servlet threw exception
java.lang.IllegalArgumentException: Value is no String and component myfrm:resultvaluewith path: {Component-Path : [Class: org.ajax4jsf.framework.ajax.AjaxViewRootRIOneOne,ViewId: /myjsp.jsp][Class: javax.faces.component.html.HtmlForm,Id: myfrm]............... javax.faces.component.html.HtmlSelectOneListbox,Id: resultvalue]} does not have a Converter
at org.apache.myfaces.shared_impl.renderkit.RendererUtils.getConvertedStringValue(RendererUtils.java:536)
Re[7]: JSF selectOneListbox получить label для выбранного зн
От: stenkil  
Дата: 16.06.07 05:13
Оценка:
Здравствуйте, Аноним, Вы писали:


А>SEVERE: Servlet.service() for servlet Faces Servlet threw exception

А>java.lang.IllegalArgumentException: Value is no String and component myfrm:resultvaluewith path: {Component-Path : [Class: org.ajax4jsf.framework.ajax.AjaxViewRootRIOneOne,ViewId: /myjsp.jsp][Class: javax.faces.component.html.HtmlForm,Id: myfrm]............... javax.faces.component.html.HtmlSelectOneListbox,Id: resultvalue]} does not have a Converter
А> at org.apache.myfaces.shared_impl.renderkit.RendererUtils.getConvertedStringValue(RendererUtils.java:536)

Так resultvalue должно быть тоже MyObject, а у тебя, судя по ошибке, почему то String
Re: JSF selectOneListbox получить label для выбранного значе
От: Igor.K США  
Дата: 16.06.07 18:00
Оценка:
А>- получаем значение resultvalue (key), как получить для него отображаемое в списке значение value?
вместе с list, map, сделать, да и все. Убудет что ли? меньше 10 строчек кода! Я не думаю что разработчики стандарта задавались целью сделать f:selectItems что то типа справочника <код> — <значение> для вашего приложения, наоборот, скорее всего ожидается, что Вы предоставите такой справочник, по которому сформируете нужный selectItems для определения одного из элементов view, если говорить в терминах MVC.
"СССР — четыре слова и все лживые" — Вагрич Бахчанян
Re[8]: JSF selectOneListbox получить label для выбранного зн
От: Аноним  
Дата: 20.06.07 04:58
Оценка:
Здравствуйте, stenkil, Вы писали:

S>Так resultvalue должно быть тоже MyObject, а у тебя, судя по ошибке, почему то String


Нет, я же писал выше что

где 
myObject resultvalue;


Как я понимаю компонент selectOneListbox может воспринимать выбранное значение только как String, а если оно Object то возникает ошибка
Re[9]: JSF selectOneListbox получить label для выбранного зн
От: stenkil  
Дата: 20.06.07 06:18
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Как я понимаю компонент selectOneListbox может воспринимать выбранное значение только как String, а если оно Object то возникает ошибка


Да, действительно String. . Тогда или перебором, или закачай ADF компоненты, там работает с Object
Re[2]: JSF selectOneListbox получить label для выбранного зн
От: Аноним  
Дата: 22.06.07 11:50
Оценка:
Здравствуйте, Igor.K, Вы писали:

А>>- получаем значение resultvalue (key), как получить для него отображаемое в списке значение value?

IK>вместе с list, map, сделать, да и все.

Ну да именно так и пришлось сделать
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.