Значение selectOneMenu пересчитывается при доступе к rowselector - PullRequest
0 голосов
/ 05 ноября 2010

Привет, у меня такая ситуация, и я не знаю, почему это происходит ..

У меня есть selectonemenu, подобное этому

<ice:selectOneMenu id="ddlProfesion" value="#{FrmClientes.profesionSeleccionado}" style="width:230px"> 
<f:selectItems value="#{SessionBean1.listaProfesion}"/> 
<f:converter converterId="DefaultSelectItemConverter" /> 
</ice:selectOneMenu> 

список предметов

public List getListaProfesion() { 

if (listaProfesion == null) { 
Session session = HibernateUtil.getSessionFactory().getCurrentSession(); 
session.beginTransaction(); 
listaProfesion = new ArrayList<SelectItem>(); 
List<Profesion> profesionList = session.getNamedQuery("Profesion.findAll").list(); 
for (Profesion c : profesionList) { 
listaProfesion.add(new SelectItem(c, c.getNombre())); 
} 
return listaProfesion; 
} 
return listaProfesion; 
} 

теперь у меня есть дата, и когда я щелкаю подряд всплывающее окно panelPopup с данными объекта Profesion ..

код selectionListener в rowSelector таков:

 public void seleccionaTerceros(RowSelectorEvent event) {


         Session session = HibernateUtil.getSessionFactory().getCurrentSession();
         session.beginTransaction();

         Query query = session.getNamedQuery("Clientes.findByTercero");
         query.setParameter("tercero", "12332454");
 // I send a parameter value for example

         if (!query.list().isEmpty()) {
            cliente = (Clientes) query.list().get(0);
             profesionSeleccionado=cliente.getProfesionID();
         } else {
             cliente = null;
             profesionSeleccionado=null;
         }

         setMostrarModal(true);

     }

Я установил profesionSeleccionado в Значение объекта и не работает, я поместил этот код в другое место, например, конструктор управляемого компонента или действие кнопки ... и ЭТО РАБОТАЕТ ...

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

пожалуйста, мне нужно какое-то руководство, я новичок в этом .. Спасибо

pd: код конвертера, используемого для перечисления объектов в selectonemenu, это

public class DefaultSelectItemConverter implements Converter {


     /**
      * Not explicitly documented.
      *
      * @see javax.faces.convert.Converter#getAsObject(javax.faces.context.FacesContext,
      * javax.faces.component.UIComponent, java.lang.String)
      */

     public Object getAsObject(FacesContext fcontext, UIComponent comp, String valueString) {

         List<UIComponent> children = comp.getChildren();
         for (UIComponent child : children) {

             if (child instanceof UISelectItem) {
                 UISelectItem si = (UISelectItem) child;
                 if (si.getValue().toString().equals(valueString)) {
                     return si.getValue();
                 }
             }

             if (child instanceof UISelectItems) {
                 UISelectItems sis = (UISelectItems)child;
                 List<SelectItem> items = (List)sis.getValue();
                 for (SelectItem si : items) {
                     if (si.getValue().toString().equals(valueString)) {
                         return si.getValue();
                     }
                 }
             }
         }
         throw new ConverterException("no conversion possible for string representation: " + valueString);
     }

     /**
      * Not explicitly documented.
      *
      * @see javax.faces.convert.Converter#getAsString(javax.faces.context.FacesContext,
      * javax.faces.component.UIComponent, java.lang.Object)
      */
     public String getAsString(FacesContext fcontext, UIComponent comp, Object value) {
         return value.toString();
     }
 }

1 Ответ

1 голос
/ 06 ноября 2010

Я нашел решение на этой странице

http://jira.icefaces.org/browse/ICE-2297

проблема была исправлена, добавив в RowSelector немедленное = "false"

:)

...