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

10 respostas
Ace

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

10 Respostas

barbon

Qual o erro? Você pode postar o log?

Ace

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

barbon

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

Ace

Cara to trabalhando com o ViewScoped
estou chamando pela action

F

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

chayimamaral

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.

Ace

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

Ace

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

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>
Ace

Ainda não rolou. :?

Ace

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

Criado 29 de agosto de 2011
Ultima resposta 19 de set. de 2011
Respostas 10
Participantes 4