【发布时间】: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