【问题标题】:selectOneMenu doesn't update with ajaxselectOneMenu 不使用 ajax 更新
【发布时间】:2014-11-20 19:17:09
【问题描述】:

我正在尝试根据使用 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 应该在我的设备上调用 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 softwares");查看方法是否被调用,但没有任何反应

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

【问题讨论】:

    标签: ajax jsf primefaces selectonemenu


    【解决方案1】:

    改为:

                <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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-19
      • 2013-08-07
      • 2015-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-03
      相关资源
      最近更新 更多