[Resolvido]Adição com JSF + Primefaces + Ajax

Boa tarde,
Pessoal, tenho CRUD que está funcionando corretamente, porém estou tendo uma pendencia que é a seguinte:

  • Ao adicionar um Produto vai normal, só que na seguencia ao tentar inserir outro ele não executa nada! não me dá erro, é como se não chamasse o metodo de adição, pois clico varias vezes e ele não gera nem a query no console.

  • E ao dar um refresh na tela ai sim volta a inserir um novo.

Algué passou por algo parecido?

vlw fico no aguardo

Qual o erro? Você pode postar o log?

Esse é o problema, não gera erro nenhum…! :?

Qual o escopo do ManagedBean que você está utilizando. O botão dispara um evento pelo action ou actionListener?

Cara to trabalhando com o ViewScoped
estou chamando pela action

verifique no commandoButton do salvar quais os componentes vc está atualizando, na propriedade update, cuide os componente que estão ali…

dependendo dos componente que vc da update ele para de funcionar, já passei por isso, ai eu atualizo somente o necessário.

qualquer coisas manda o código da página ai…

[]´s

Meu, não respondendo sua dúvida, mas dando um toque : estou desenvolvendo com o Glassfish (que realmente fica muitíssimo mais pesado que o TomCat), mas eu ganho em controle do aplicativo.
TODO e QUALQUER erro o Glassfish te reporta o local exato onde ocorreu; inclusive se for na página xhtml, no código java, no MB, tudo. Se tiver qualquer errinho, dependendo da situação, ele monta uma parte da página e te mostra o que ocorreu no log.

É muito produtivo isto, para voce saber exatamente o que está ocorrendo se não tiver condições de debugar, por exemplo.

Vlw pelo toque man, vou repensar para meus proximos projetos…
:smiley:

[quote=fdcarli]verifique no commandoButton do salvar quais os componentes vc está atualizando, na propriedade update, cuide os componente que estão ali…

dependendo dos componente que vc da update ele para de funcionar, já passei por isso, ai eu atualizo somente o necessário.

qualquer coisas manda o código da página ai…

[]´s[/quote]

MB

@ViewScoped
@ManagedBean
public class ProdutoBean {
	
	private Produto produto = new Produto();
	private List<Produto> produtos;
	private Autor autor = new Autor();
	
	//construtor
	public ProdutoBean(){
		//inicilizar os objetos que vão ser setados na view.
		this.produto = new Produto();		 
		this.produto.setAutor(new Autor());
	}

	//se o id for nulo então salva, se não, atualiza
	public void grava(){
		Dao<Produto> dao = new Dao<Produto>(Produto.class);
		if(produto.getId() == null){
			dao.salva(produto);			
		}else{
			dao.atualiza(produto);
		}
		this.autor = new Autor();
		this.produto = new Produto();		
		this.produtos = dao.listaTudo();
	}

XHTML

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
		xmlns:f="http://java.sun.com/jsf/core"
		xmlns:h="http://java.sun.com/jsf/html"
		xmlns:ui="http://java.sun.com/jsf/facelets"
		xmlns:p="http://primefaces.prime.com.tr/ui">
	
	
	<ui:composition template="/_template.xhtml">
		<ui:define name="corpo">
		
		<h2>Adiciona Produtos</h2>
			  
			<h:form id="formAdicao">
				<p:tabView>
					<p:tab title="Dados do Produto">
						<fieldset>
							<legend>Dados do Produto</legend>
							<h:outputLabel value="ISBN:" for="code" />
							<p:inputText value="#{produtoBean.produto.code}" id="code" />					
							
							<h:outputLabel value="Titulo:" for="titulo" />
							<p:inputText value="#{produtoBean.produto.titulo}" id="titulo" />
							
							<h:outputLabel value="Genero:" for="genero" />
							<p:inputText value="#{produtoBean.produto.genero}" id="genero" />
							
							<h:outputLabel value="Preco:" for="preco" />
							<p:inputText value="#{produtoBean.produto.preco}" id="preco" />
							
							<h:outputLabel value="Peso:" for="peso" />
							<p:inputText value="#{produtoBean.produto.peso}" id="peso" />										
							
							<h:commandButton value="Cancelar" action="#{produtoBean.cancelaEdicao}" rendered="#{produtoBean.produto.id != null}">
								<f:ajax render="@form" />
							</h:commandButton>
						</fieldset>
					</p:tab>					
					
					<p:tab title="Dados do Autor">
						<fieldset>
							<legend>Dados do Autor</legend>
							<h:outputLabel value="Nome:" for="nome" />
							<p:inputText value="#{produtoBean.produto.autor.nome}" id="nome" />
							
							<h:outputLabel value="Sobre:" for="sobre" />
							<p:editor value="#{produtoBean.produto.autor.sobre}" id="sobre" />
							
							<h:commandButton action="#{produtoBean.grava}" value="Gravar">
								<f:ajax execute="@form" render="@form :formLista" />
							</h:commandButton>
						</fieldset>	
					</p:tab>					
				</p:tabView>					
			</h:form>
		
			
			<h2>Listagem</h2>
		
			<h:form id="formLista">
				<p:dataTable value="#{produtoBean.produtos}" var="p" paginator="true" rows="5">
					<p:column headerText="ISBN">
						#{p.code}
					</p:column>
					<p:column headerText="Titulo">
						#{p.titulo}
					</p:column>
					<p:column headerText="Genero">
						#{p.genero}
					</p:column>
					<p:column headerText="Preco">
						<h:outputText value="#{p.preco}">
							<f:convertNumber pattern="R$ #0.00" />
						</h:outputText>
					</p:column>
					<p:column headerText="Peso">
						#{p.peso}
					</p:column>					 
					<p:column headerText="Autor">
						#{p.autor.nome}
					</p:column>
					<p:column headerText="Sobre">	
						<h:outputText value="#{p.autor.sobre}" escape="false" />																																					
					</p:column>
					<p:column headerText="Alterar" >						
						<h:commandLink>
							<h:graphicImage library="imagens" name="modify.png" styleClass="img_ico" />
								<f:setPropertyActionListener value="#{p}" target="#{produtoBean.produto}">
									<f:ajax execute="@form" render="@form :formAdicao" />
								</f:setPropertyActionListener>							
						</h:commandLink>
					</p:column>
					<p:column headerText="Remover">
						<h:commandLink onclick="return confirm('Deseja Realmente Excluir?')" action="#{produtoBean.remove(p)}">
							<f:ajax render="@form">
								<h:graphicImage library="imagens" name="delete.png" styleClass="img_ico" />
							</f:ajax>
						</h:commandLink>
					</p:column>					
				</p:dataTable>
			</h:form>			
		</ui:define>
	</ui:composition>	
</html>

Ainda não rolou. :?

Galera depois de ter voltado a ver esta pendencia que havia deixado de lado, não sei se é a forma mais correta mas consegui da seguinte maneira:

Alterei o Método:

public void grava(){
		Dao<Produto> dao = new Dao<Produto>(Produto.class);
		if(produto.getId() == null){
			dao.salva(produto);			
		}else{
			dao.atualiza(produto);
		}
		this.autor = new Autor();
		this.produto = new Produto();		
		this.produtos = dao.listaTudo();
	}

Para:

public String grava(){
		Dao<Produto> dao = new Dao<Produto>(Produto.class);
		if(produto.getId() == null){
			dao.salva(produto);
		}else{
			dao.atualiza(produto);
		}
		this.autor = new Autor();
		this.produto = new Produto();
		this.produtos = dao.listaTudo();

		return "/produto.xhtml?faces-redirect=true";
	}

Caso alguem esteja tendo o mesmo problema fica ai a dica…!

Vlw