我正在尝试使用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
}
答案 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