2016-11-11 8 views
0

У меня есть два selectOneMenu, одно обновление - другое, но второе не обновляет его значение и остается с первым значением, несмотря на то, что в любом коде эти две переменные равны самих себя. Даже valueEventChangeListener возвращает значение estados_eam. Спасибо, ребята, любая помощь будет очень признательна. С наилучшими пожеланиями.Вложенные <p: selectOneMenu не обновляет значение

<h:outputText value="ESTADO:" /> 
       <p:selectOneMenu id="estados_eam" value="#{estadosMB.clave}" 
        style="width:200px;" required="true"> 
        <f:selectItem itemLabel="Seleccione un estado" itemValue="#{null}" noSelectionOption="true" /> 
        <f:selectItems value="#{estadosMB.estadosMap}" /> 
        <p:ajax listener="#{municipiosMB.handleEstadosChange}" update="municipios_eam"/> 
       </p:selectOneMenu> 
       <p:message for="estados_eam" /> 

       <h:outputText value="MUNICIPIO:" /> 
       <p:selectOneMenu id="municipios_eam" valueChangeListener="#{municipiosMB.selectOneMenuListener}" 
        value="#{municipiosMB.idMunicipio}" label="Municipios" 
        converter="javax.faces.Integer" style="width:200px;" required="true"> 
        <f:selectItem itemLabel="Seleccione un Municipio" 
         itemValue="#{null}" /> 
        <f:selectItems value="#{municipiosMB.municipiosMap}" /> 
        <p:ajax listener="#{municipiosMB.handleMunicipioSelectedChange}" /> 
       </p:selectOneMenu> 
       <p:message for="municipios_eam" /> 

Bean Код:

@ManagedBean(name = "municipiosMB") 
    @ViewScoped 
    public class MunicipiosMB implements Serializable { 

     /** 
     * 
     */ 
     private static final long serialVersionUID = 112312323213445L; 

     private static Logger logger = LoggerFactory.getLogger(MunicipiosMB.class); 

     @ManagedProperty(value = "#{MunicipiosService}") 
     private MunicipiosService municipioService; 

     @ManagedProperty(value = "#{estadosMB}") 
     private EstadosMB estadosMB; 



     private Map<String, String> municipiosMap; 
     private Municipio selectedMunicipio; 
     private String clave; 
     private Estados estado; 
     private Integer id; 
     private String nombre; 
     private String siglas; 
     private String estado_clave; 
     private Municipio municipio; 
     private Integer idMunicipio; 

     public void updateMunicipio(Municipio municipio) { 
      this.clave = municipio.getIdEstado().getClave(); 
      this.id = municipio.getId(); 
      this.nombre = municipio.getNombre(); 
      this.setMunicipio(municipio); 
     } 

     public Municipio getMunicipio() { 
      return municipio; 
     } 

     public void setMunicipio(Municipio municipio) { 
      this.municipio = municipio; 
     } 

     public String getClave() { 
      return clave; 
     } 

     public void setClave(String clave) { 
      this.clave = clave; 
     } 

     public Estados getEstado() { 
      return estado; 
     } 

     public void setEstado(Estados estado) { 
      this.estado = estado; 
     } 

     public Integer getId() { 
      return id; 
     } 

     public void setId(Integer id) { 
      this.id = id; 
     } 

     public String getNombre() { 
      return nombre; 
     } 

     public void setNombre(String nombre) { 
      this.nombre = nombre; 
     } 

     public String getSiglas() { 
      return siglas; 
     } 

     public void setSiglas(String siglas) { 
      this.siglas = siglas; 
     } 

     public Municipio getSelectedMunicipio() { 
      return selectedMunicipio; 
     } 

     public void setSelectedMunicipio(Municipio selectedMunicipio) { 
      this.selectedMunicipio = selectedMunicipio; 
     } 

     public MunicipiosService getMunicipioService() { 
      return municipioService; 
     } 

     public void setMunicipioService(MunicipiosService municipioService) { 
      this.municipioService = municipioService; 
     } 

     public Map<String, String> getMunicipiosMap() { 

      return municipiosMap = municipioService.getMunicipiosByClaveEstado(estadosMB.getClave()); 
     } 

     public void setMunicipiosMap(Map<String, String> municipiosMap) { 
      this.municipiosMap = municipiosMap; 
     } 

     public EstadosMB getEstadosMB() { 
      return estadosMB; 
     } 

     public void setEstadosMB(EstadosMB estadosMB) { 
      this.estadosMB = estadosMB; 
     } 



     public Integer getIdMunicipio() { 
      return idMunicipio; 
     } 

     public void setIdMunicipio(Integer idMunicipio) { 
      this.idMunicipio = idMunicipio; 
     } 

     public void handleEstadosChange() { 
      try { 
       if (estadosMB.getClave() != null || !estadosMB.getClave().equals("77")) { 
        this.idMunicipio=0; 
        logger.info(" valor muncipio "+ this.idMunicipio); 
        logger.info("La clave seleccionada es "+estadosMB.getClave()); 
        this.setMunicipiosMap(municipioService.getMunicipiosByClaveEstado(estadosMB.getClave())); 
        logger.info("Clave Estado Seleccionado: " + estadosMB.getClave()); 
        logger.info("Clave Municipio Seleccionado: " + this.idMunicipio); 
       } else { 
        this.idMunicipio=0; 
        this.setMunicipiosMap(new HashMap<String, String>()); 
       } 
      } catch (NullPointerException e) { 
       logger.info("EstadosMB Null"); 
       this.setMunicipiosMap(new HashMap<String, String>()); 
      } 
     } 

     public void handleMunicipioSelectedChange() { 
      logger.info("municipio seleccionado:::::: "+this.getIdMunicipio()); 
      logger.info("municipio seleccionado2:::::: "+this.getId()); 
     } 

     public Municipio selectedMunicipio() { 
      return municipioService.getMunicipiosById(this.getId()); 
     } 

     public void selectOneMenuListener(ValueChangeEvent event) { 
      //This will return you the newly selected 
      //value as an object. You'll have to cast it. 
      Object newValue = event.getNewValue(); 
      logger.info("valor nuevo"+ newValue.toString()); 
      //The rest of your processing logic goes here... 
     } 

    } 

I don't have any idea, why it is happending here...My EstadosMB 

@ManagedBean(name="estadosMB") 
@ViewScoped 
public class EstadosMB implements Serializable { 

    @ManagedProperty(value="#{EstadosService}") 
    private EstadosService estadosService; 

    private String clave = ""; 
    private Map<String,String> estadosMap; 

    public EstadosService getEstadosService() { 
     return estadosService; 
    } 

    public void setEstadosService(EstadosService estadosService) { 
     this.estadosService = estadosService; 
    } 

    public Map<String, String> getEstadosMap() { 
     return estadosMap = estadosService.getEstadosMap(); 
    } 

    public void setEstadosMap(Map<String, String> estadosMap) { 
     this.estadosMap = estadosMap; 
    } 

    public String getClave() { 
     return clave; 
    } 

    public void setClave(String clave) { 
     this.clave = clave; 
    } 



} 

ответ

0

Есть два решения:

  1. обновление меню в методе слушателя в бобе, добавив следующую строку:

    RequestContext.getCurrentInstance().update("municipios_eam"); 
    
  2. Использование ap: remoteComman d обновить 2-е меню, так что вместо того, чтобы:

    <p:ajax listener="#{municipiosMB.handleEstadosChange}" update="municipios_eam"/> 
    

    использование:

    //the remoteCommand should be placed before the first menu 
    <p:remoteCommand name="updateMuncipios_eam" update="municipios_eam"/> 
    
    <h:outputText value="ESTADO:" /> 
    //some more code 
    <p:ajax listener="#{municipiosMB.handleEstadosChange}" oncomplete="updateMuncipios_eam()/> 
    
+0

Я судимый, эти решения, но кадры представляют такое же поведение. – csstugfurher

+0

Второе меню municipios_eam обновляет свой список, но зафиксированное значение не обновляется на выбранном элементе, значение, зафиксированное в этом меню, одинаково на estados_eam. Огромное спасибо. – csstugfurher

+0

Служба вернула неправильное значение в списке municipio_eam. – csstugfurher

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

  • Нет связанных вопросов^_^