Como recuperar um id que é autoincrement de algum registro do meu bd e trazer pra minha consulta

5 respostas
jpajsfjava
doodohrafael

Quando eu clico em “Atualizar”, os valores aparecem nos inputexts… o que eu quero é que
ao clicar em “Gravar” o método update do meu dao seja chamado, porém ->

Eu debuguei esse meu método e percebi que ele não entra no else porque ele não traz o id do registro e acaba criando um novo registro ao invés de atualizar.

public void grava() {
	ProdutoDao dao = new ProdutoDao();
	
	if(produto.getId() == null) {
		dao.save(produto);
	}else {
		dao.update(produto);
	}
	
	this.produtos = dao.listaTodos(); //atualiza a lista com o novo produto inserido
	this.produto = new Produto(); // Limpar campos criando uma nova instancia
}

Minha View:

<?xml version="1.0" encoding="ISO-8859-1" ?>

<h:head>

Sistema de Notas Fiscais
<h:outputLabel value="Descrição:" for="descricao" />
				<h:inputTextarea id="descricao" value="#{produtoBean.produto.descricao}"/>
				
				<h:outputLabel value="Preço:" for="preco" />
				<h:inputText id="preco" value="#{produtoBean.produto.preco}"/>
				
				<h:commandButton value="Gravar" action="#{produtoBean.grava}" />
			</h:panelGrid>
		</h:form>
		<br />
		
		<h:form>
		<h:inputHidden value="#{produtoBean.produto.id}" />
		
		<h2>
			<h:outputText value="Novo Produto" rendered="#{empty produtoBean.produto.id}" />
			<h:outputText value="Editar Produto" rendered="#{not empty produtoBean.produto.id}" />
		</h2>
		
		<h:dataTable value="#{produtoBean.produtos}" var="produto">
		
			<h:column>
			<f:facet name="header">Nome</f:facet>
				#{produto.nome}
			</h:column>
			
			<h:column>
			<f:facet name="header">Descrição</f:facet>
				#{produto.descricao}
			</h:column>
			
			<h:column>
				<f:facet name="header">Preço</f:facet>
					#{produto.preco} 
				<f:facet name="footer" value="">Total: </f:facet> 
				<!-- #{produtoBean.getProdutos()} -->
			</h:column>
			
			<h:column>
				<f:facet name="header">Ações</f:facet>
				<h:commandLink action="#{produtoBean.exclui(produto)}" value="Remover"/> 
				
			</h:column>
			<h:column>
				<h:commandLink value="Atualizar">
					<f:setPropertyActionListener value="#{produto}" target="#{produtoBean.produto}" />
				</h:commandLink>
			</h:column>
			
		</h:dataTable>
		</h:form>
</h:body>

5 Respostas

I

O certo não seria comparar com zero? Se o o id é um número do tipo, short, int, long, float e double, ele é inicializado com zero e não com null - que é utilizado para inicializar objetos - , conforme descrito por Deitel (JCP8, pág. 105).

doodohrafael

não faz sentido eu comparar com 0, pq o eu quero comparar é se existe algum id e não qual o id.

juliofsn

Mas é sobre isso que o @Iohannes falou. Se o id for um tipo primitivo do Java, ele nunca vai ser null, o valor padrão dos tipos primitivos é sempre zero.

doodohrafael

certo. troquei para 0 amigo. Agora ele mostra o erro, deu null pointer justamente do getId, ele não ta resgatando o Id

Lucas_Camara

Qual o escopo desse managedBean?

Criado 11 de janeiro de 2020
Ultima resposta 12 de jan. de 2020
Respostas 5
Participantes 4