Olá Bruno,
tô num enrosco danado aqui com esse código. Vou escrever aqui pra ver se você pode me ajudar. Já tentei de tudo, mas o negócio não funciona. :(
Quando eu passava o id pro selectOneMenu o sistema funcionava normal:
<h:selectOneMenu id="categoria" value="#{categoriaFace.selectedCategoria.id}">, mas acontecia aquele problema de eu só conseguir manipular o id do objeto.
Tentei fazer do jeito que você sugeriu... o problema é que não consigo amarrar o selectedCategoria do MB com o item escolhido na tela:
Tentei assim: <h:selectOneMenu id="categoria" value="#{categoriaFace.selectedCategoria}">
Do jeito acima o selectedCategoria do meu MB não é setado a cada clique, é daí que vem o NullPointer... pois a chamada this.selectedCategoria.getId() do método actionCarregaComboSubcategoria retorna null.
Segue o código:
xhtml:
<!-- categorias -->
<h:outputLabel for="categoria" value="Categoria " styleClass="rotulos" />
<h:selectOneMenu id="categoria" value="#{categoriaFace.selectedCategoria}" converter="conversorCategoria" rendered="true">
<f:selectItems value="#{categoriaFace.categorias}" />
<a4j:support event="onchange" ajaxSingle="false" action="#{categoriaFace.actionCarregaComboSubcategoria}" reRender="cat,categoria,subcategoria,tableParams" />
</h:selectOneMenu>
MB:
private Categoria selectedCategoria = new Categoria();
// gets/sets
public List<SelectItem> getCategorias(){
Session session = HibernateUtil.currentSession();
CategoriaDAO dao = new CategoriaDAO(session);
List<Categoria> lc = dao.loadAll();
List<SelectItem> items = new ArrayList<SelectItem>(lc.size());
for(Categoria cat : lc){
items.add(new SelectItem(cat, cat.getNome()));
}
// OS DOIS SYSOUTS ESTAO IMPRIMINDO NULL
System.out.println("> selectedCategoria.getId() >>> " + this.selectedCategoria.getId());
System.out.println("> selectedCategoria.getNome() >>> " + this.selectedCategoria.getNome());
return items;
}
/**
* metodo que carrega o combo(subCategoria) com todas subCategorias relacionadas a categoria o qual foi escolhida no combo "categoria"
* @return
*/
public String actionCarregaComboSubcategoria(){
// ESSE EH O CAUSADOR DO NULLPOINTER
this.subCategorias = getSubcategoriasByCategoria(this.selectedCategoria.getId());
return "carregaCombosSubCategoriaSucesso";
}
Abraço...