Pessoal,
Tenho uma classe produto, que se relaciona (@ManyToOne) com a classe Categoria e também com a classe Unidade. Consigo carregar a lista de unidade se de categorias no cadastro do produto, porém não consigo persistir o objeto, ás vezes, salva, mas os campos id_categoria e id_unidade não são salvos. Pesquisei na internet e vi que tenho que converter os itens selecionáveis do meu h:selectOneMenu para um objeto e vice-versa. Estou tentando fazer isso, mas os dados ainda não estão sendo salvos no BD e agora está aparecendo o seguinte erro:
Não sei o que está errado, já tentei converter para String, par ao meu objeto, enfim já tentei de tudo, mas esse erro não para de aparecer.
Se alguem puder me ajudar, fico muito grato.
CategoriaConverter
@FacesConverter(value = "converteCategoria", forClass = Categoria.class)
public class CategoriaConverter implements Converter {
private CategoriaDao categoriaDao;
public CategoriaConverter() {
this.categoriaDao = new CategoriaDaoImp();
}
@Override
public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
return categoriaDao.getCategoria(Integer.valueOf(arg2));
}
@Override
public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
return String.valueOf(((Categoria) arg2).getId());
}
}
produto.xhtml:
<h:form>
<p:fieldset legend="Cadastro de Produto" styleClass="cadastros">
<!--<h:inputHidden value="#{produtoController.produto.id}" id="id" />-->
<p:focus for="descricao"/>
<h:panelGrid columns="2" id="tabela">
<h:outputLabel value="Descrição:" for="descricao"/>
<h:inputTextarea value="#{produtoController.produto.descricao}" id="descricao"
cols="60" rows="2" required="true"/>
<h:outputLabel value="Categoria:" for="categoria"/>
<h:selectOneMenu value="#{produtoController.produto.categoria}" id="categoria">
<f:selectItems value="#{categoriaController.listaCategorias}" var="categorias"
itemLabel="#{categorias.descricao}" itemValue="#{categorias.id}"/>
<f:converter converterId="converteCategoria"/>
</h:selectOneMenu>
<h:outputLabel value="Unidade" for="unidade"/>
<h:selectOneMenu value="#{produtoController.produto.unidade}" id="unidade">
<f:selectItems value="#{unidadeController.listaUnidades}" var="unidades"
itemLabel="#{unidades.descricao}" itemValue="#{unidades.id}"/>
<f:converter converterId="converteUnidade"/>
</h:selectOneMenu>
<h:outputLabel value="Estoque Mínimo:" for="estoqueMinimo"/>
<h:inputText value="#{produtoController.produto.estoqueMinimo}" id="estoqueMinimo" size="4" required="true"/>
<h:outputLabel value="Estoque Máximo:" for="estoqueMaximo"/>
<h:inputText value="#{produtoController.produto.estoqueMaximo}" id="estoqueMaximo" size="4" required="true"/>
<h:outputLabel value="Valor Unitário:" for="valor"/>
<h:inputText value="#{produtoController.produto.valor}" id="valor" size="10" required="true"/>
<h:outputLabel value="Localização:" for="localizacao"/>
<h:inputTextarea value="#{produtoController.produto.localizacao}" id="localizacao"
cols="60" rows="2" required="true"/>
<h:outputLabel value="Perecível:" for="perecivel"/>
<h:selectOneMenu value="#{produtoController.produto.perecivel}" id="perecivel" required="true">
<f:selectItem itemValue="true" itemLabel="Sim"/>
<f:selectItem itemValue="false" itemLabel="Não"/>
</h:selectOneMenu>
<h:outputLabel value="Ativo:" for="ativo"/>
<h:selectOneMenu value="#{produtoController.produto.ativo}" id="ativo" required="true">
<f:selectItem itemValue="true" itemLabel="Sim"/>
<f:selectItem itemValue="false" itemLabel="Não"/>
</h:selectOneMenu>
<h:outputLabel value="Observações:" for="obs"/>
<h:inputTextarea value="#{produtoController.produto.obs}" id="obs"
cols="60" rows="2" required="true"/>
</h:panelGrid>
<h:commandButton action="#{produtoController.salvar}" value="Salvar"/>
<h:commandButton action="#" value="Excluir" />
</p:fieldset>
</h:form>