2014-09-25 61 views
0

我想通過使用ajax更新selectOneMenu基於從另一個selectOneMenu所做的更改。selectOneMenu不會更新ajax

XHTML

  <p:outputLabel value="Tipo:" for="tipoCombo" /> 
      <p:selectOneMenu id="tipoCombo" value="#{equipamentoBean.tipo}" > 
       <f:selectItem itemLabel="Selecione" itemValue=""></f:selectItem> 
       <f:selectItems value="#{equipamentoBean.tipos}"></f:selectItems> 
       <p:ajax event="change" listener="#{equipamentoBean.listaSoftwares}" update="mainForm:softwareCombo" /> 
      </p:selectOneMenu> 

      <p:outputLabel value="Software:" for="softwareCombo" /> 
      <p:selectOneMenu id="softwareCombo" value="#{equipamentoBean.software}"> 
       <f:selectItem itemLabel="Selecione" itemValue=""></f:selectItem> 
       <f:selectItems value="#{equipamentoBean.softwares}"></f:selectItems> 
      </p:selectOneMenu> 

當我改變我的tipoCombo阿賈克斯應該叫我equipamentoBean方法listaSoftwares然後我softwareCombo將填充

listaSoftware

public void listaSoftwares(){ 
     System.out.println("Carregando softwares"); 
     this.softwares = new EquipamentoSoftwareDao().listaSoftwarePorTipo(1); 
     System.out.println("Carregado"); 
    } 

我添加了System.out.println(「Carregando軟件「);看是否正被調用的方法,但沒有任何反應

我正在關注的主要展示http://www.primefaces.org/showcase/ui/ajax/dropdown.xhtml

我嘗試不同的方法,但是這一次似乎是正確的。

@Bean

@ManagedBean 
@SessionScoped 
public class EquipamentoBean { 

    private List<Equipamento> equipamentos; 
    private Equipamento equipamento; 
    private List<Equipamento> equipamentosFiltrados;  
    private List<EquipamentoTipo> tipos;  
    private EquipamentoTipo tipo; 
    private List<Regiao> regioes; 
    private Regiao regiao; 
    private List<EquipamentoSoftware> softwares; 
    private EquipamentoSoftware software; 

    public EquipamentoBean(){ 

    } 

    @PostConstruct 
    public void init(){ 
     System.out.println("init"); 
     tipo = new EquipamentoTipo(); 
     //Pega os equipamentos no banco 
     this.equipamentos = new EquipamentoDao().listaEquipamentos(); 
     this.tipos = new EquipamentoTipoDao().listaTipos(); 
     this.regioes = new RegiaoDao().listaRegioes(); 

     System.out.println("init end"); 
    } 

    public void salva(ActionEvent actionEvent){ 
     EquipamentoDao dao = new EquipamentoDao(); 
     dao.salva(equipamento); 
     addMessage("Equipamento Salvo!"); 
    } 

    public void addMessage(String summary){ 
     FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, summary, null); 
     FacesContext.getCurrentInstance().addMessage(null, message); 
    } 

    public void listaSoftwares(ChangeEvent eg){ 
     System.out.println("Carregando softwares"); 
     this.softwares = new EquipamentoSoftwareDao().listaSoftwarePorTipo(1); 
     System.out.println("Carregado"); 
    } 
    public List<EquipamentoTipo> listarTipos(){ 
     this.tipos = new EquipamentoTipoDao().listaTipos(); 
     return tipos; 
    } 

    //GETTERS AND SETTERS 
} 

回答

0

更改爲:

  <p:outputLabel value="Tipo:" for="tipoCombo" /> 
      <p:selectOneMenu id="tipoCombo" value="#{equipamentoBean.tipo.nome}" > 
       <f:selectItem itemLabel="Selecione" itemValue=""></f:selectItem> 
       <f:selectItems value="#{equipamentoBean.tipos}" var="#{tipo}" itemValue="#{tipo.nome}"></f:selectItems> 
       <p:ajax event="change" listener="#{equipamentoBean.listaSoftwares}" update="mainForm:softwareCombo" /> 
      </p:selectOneMenu> 

現在,它的工作

裁判:http://www.guj.com.br/29357-primefaces-erro-ao-atualizar-um-selectonemenu-usando-ajax