Caros amigos, estou há 3 dias querendo descobrir como fazer para um <p:selectomenu> passar o valor para outro, o valor vem sempre nulo.Já ví que aqui no GUJ tem algumas mensagens de dicas sobre este problema, mas nenhuma dica ainda resolveu meu problema.Posto abaixo o código da minha página jsf, meu managedBEan e o método que chamo pelo dao.
MINHA PÁGINA JSF
<h:form id="entraproduto" prependId="false" ><!--
-->
<p:growl id="msgs" showDetail="true"/>
<p:panelGrid columns="2" style="alignment-adjust: central" id="entra" >
<f:facet name="header">
Entrada de Produtos
</f:facet>
<h:outputText value="Quantidade: *" id="qntde"/>
<p:inputText value="#{entraProdutoFace.selectedEntradas.qtde_entrada}" size="4" maxlength="4"/>
<h:outputText value="Data Entrada: *" id="dtEntrada"/>
<p:inputMask mask="99/99/9999" value="#{entraProdutoFace.selectedEntradas.data_entrada}" size="8"/>
<h:outputText value="Categorias: *"/>
<p:selectOneMenu value="#{categoriaFace.selectedCategoria}" id="categoria2" effect="fade" >
<f:selectItem itemLabel="Selecione" itemValue=""/>
<f:selectItems value="#{categoriaFace.categorias}" var="cat" itemLabel="#{cat.catNome}" itemValue="#{cat.catId}" />
<p:ajax update="prod" listener="#{produtoFace.mudaProduto}" immediate="true" />
</p:selectOneMenu>
<br/>
<p:selectOneMenu id="prod" value="#{produtoFace.selectedProduto.proId}" effect="fade" >
<f:selectItem itemLabel="Selecione" itemValue=""/>
<f:selectItems value="#{produtoFace.produtos}" var="produto" itemLabel="#{produto.proNome}" itemValue="#{produto.proId}" />
</p:selectOneMenu>
</p:panelGrid>
</h:form>
Esse é o método que preenche a lista de categorias, ele passa uma lista.
public List<Categoria> getCategorias() throws ClassNotFoundException, SQLException{
if(categorias == null){
categorias = catDAO.getAllCategorias();
}
return categorias;
}
Esse é o método que é chamado pelo ajax, ele está dentro de ProdutoFace
public void mudaProduto() throws ClassNotFoundException, SQLException{
Produtos = null;
Produtos = new ArrayList<Produto>();
Produtos = proDAO.pegaProdutosByCat(this.SelectedCategoria);
}
Abaixo o Método PegaProdutosByCat() que fica no ProdutoDAO
public List pegaProdutosByCat(Categoria cat) throws ClassNotFoundException, SQLException{
if(cat == null)return null;
List <Produto> lista = new ArrayList<Produto>();
PreparedStatement ps = getPreparedStatement("select * from produto where categoria_cat_ID=?");
ps.setInt(1, cat.getCatId());
ResultSet rs = ps.executeQuery();
while(rs.next()){
Produto prod = new Produto();
prod.setProId(rs.getInt("pro_ID"));
prod.setProObservacao(rs.getString("pro_Observacao"));
prod.setProNome(rs.getString("pro_Nome"));
lista.add(prod);
}
return lista;
}
O erro é que simplesmente o selectedcategoria vem sempre nulo do primeiro selectonemenu.Quem puder me auxiliar fico muitissimo grato.Estou querendo saber como faço pra preencher o segundo selectonemenu com os produtos da categoria escolhida.