selectOneMenu不会使用ajax进行更新

时间:2014-09-25 21:24:30

标签: ajax jsf primefaces selectonemenu

我正在尝试使用ajax根据其他selectOneMenu所做的更改来更新selectOneMenu。

我的 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时,ajax应该调用我的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软件”);查看方法是否被调用,但没有任何反应

我正在关注主要的showCase 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
}

1 个答案:

答案 0 :(得分: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