Validação de formulários com JSF + Primefaces

8 respostas
leandroalp

Olá pessoal!

Apesar de este ser meu primeiro post, praticamente todos os dias estou navegando nas páginas do GUJ em busca de respostas. Como desta vez não encontrei, é chegada a hora do meu primeiro post. Sou iniciante nesse mundo Java e ainda um pouco perdido.

Tenho um form dentro de um dialog, o qual após o preenchimento e ao clicar em “Salvar” é feita uma simples verificação através da propriedade required=“true”.
Se algum campo está em branco, ele exibe mensagens para o usuário (ainda não preciso de verificações mais complexas). Até ai tudo bem.
O problema é após isso, o botão “Salvar” não faz mais efeito. Eu preencho os campos em branco após as mensagens de erro, mas não consigo mais submeter os dados para validação e gravação ao banco.

Alguém tem uma idéia do que possa ser?

Obs: não coloquei códigos aqui pois tenho algumas restrições com esses sistemas que desenvolvemos aqui. Porém, qualquer coisa posso dar um jeito.

Peço desculpas se já existe algum tópico a respeito disso, realmente não encontrei.
E também, já agradeço qualquer ajuda.

Abraços!

8 Respostas

L

Cara você colocou para debugar??? Aparece algum erro no console ???

A

Fica um pouco difícil assim, mas vamos ver, debugando o código, você consegue ver se ele chega a entrar na função que você está chamando no teu actionlistener do botão, confirma se está chegando até lá ou se nem isso chega a ocorrer, coloca um breakpoint em cima do seu método.

leandroalp

Obrigado por tentarem “decifrar” o meu problema.

Ao submeter um formulário em branco, recebo como resposta um erro do banco de dados, pois os campos não permitem valores nulos.
O formulário é preenchido com mensagens de erro em cada campo em branco.
Eu preencho os campos em branco, porém ao clicar em salvar novamente, o sistema fica parado. É como se o commandButton perdesse suas funcionalidades após submeter um formulário que retornou erros.

Os campos estão desta maneira:

<h:outputText for="titulo" value="T&iacute;tulo:" />

					<p:inputText id="titulo" 
							     value="#{publicacaoBean.novaPublicacao.titulo}" 
							     label="Titulo" 
							     required="true" 
							     requiredMessage="Campo titulo é obrigatorio">							       							 
					</p:inputText>

					<p:message for="titulo" display="icon" />

Segue o código do commandBuitton:

<p:commandButton value="Salvar" icon="ui-icon-circle-check" update=":formNovo" actionListener="#{publicacaoBean.salvarNovaPublicacao()}" />

O método salvarNovaPublicação() que o commandButton chama trata-se apenas de setar os valores digitados nas propriedades do objeto e chamar um método gravar() que está no DAO.

Novamente, obrigado por qualquer ajuda e desculpas por não poder disponibilizar o código na integra para vcs.

A

adicione a propriedade ajax=“true” no seu botão e veja se isso já faz o truque

leandroalp

Só para deixar claro, ao debugar ele entra na função normalmente, mas como falei, apenas na primeira vez que clico em salvar.

Se houver erros, eu clico no botão e a função não é chamada novamente, e o sistema fica parado.

leandroalp

andre.froes, ao setar ajax para true, as mensagens de erro vão sumindo conforme eu preencho os campos. Já é alguma coisa, obrigado!

Porém, ao preencher os campos e tentar salvar novamente, recebo uma mensagem de erro do banco de dados:

Mai 16, 2012 2:21:06 PM org.hibernate.util.JDBCExceptionReporter logExceptions
Advertência: SQL Error: 1, SQLState: 23000
Mai 16, 2012 2:21:06 PM org.hibernate.util.JDBCExceptionReporter logExceptions
Grave: ORA-00001: restrição exclusiva (ARTIGOS.SYS_C0014208) violada

Mai 16, 2012 2:21:06 PM org.hibernate.util.JDBCExceptionReporter logExceptions
Advertência: SQL Error: 1, SQLState: 23000
Mai 16, 2012 2:21:06 PM org.hibernate.util.JDBCExceptionReporter logExceptions
Grave: ORA-00001: restrição exclusiva (ARTIGOS.SYS_C0014208) violada

javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update

Se tiver alguma idéia, agradeço. Mas vou continuar tentando aqui.
Obrigado mesmo!

A

como está o método salvarNovaPublicacao() e a persistência dos seus dados?

leandroalp

Bom, lá vai.
Não fiz esse código, não to entendendo nada(só trabalhei com PHP até dias atrás)…estas anotações foram colocadas por outro programador para me “ajudar”…então, acho que posso aprender mais com vcs aqui mesmo!

Método salvarNovaPublicacao():

public void salvarNovaPublicacao() {
		ELContext elContext = FacesContext.getCurrentInstance().getELContext();
		entityManager = (EntityManager) FacesContext.getCurrentInstance()
				.getApplication().getELResolver()
				.getValue(elContext, null, "entityManager");

			
			try {
				/* Cria os DAOs */
				PublicacaoDAO pDAO = new PublicacaoDAO(entityManager);
				EntidadeDAO eDAO = new EntidadeDAO(this.entityManager);
				EventoDAO evtDAO = new EventoDAO(this.entityManager);
				ClassificacaoDAO cDAO = new ClassificacaoDAO(this.entityManager);
				FaixaCustoDAO fcDAO = new FaixaCustoDAO(this.entityManager);
				FonteOrigemDAO foDAO = new FonteOrigemDAO(this.entityManager);
				UsuariosDAO uDAO = new UsuariosDAO(this.entityManager);
				TipoArquivoDAO taDAO = new TipoArquivoDAO(this.entityManager);

				/*
				 * Cria objetos complementares Entidade
				 */
				Entidade entidade = new Entidade();
				entidade = eDAO.buscaPorId(entidadeSelecionada.getId());
				this.entidadeSelecionada = entidade;
				this.novaPublicacao.setEntidade(entidadeSelecionada);

				/* Evento */
				Evento evento = new Evento();
				evento = evtDAO.buscaPorId(eventoSelecionado.getId());
				this.eventoSelecionado = evento;
				this.novaPublicacao.setEvento(eventoSelecionado);

				/* Classificacao */
				Classificacao classificacao = new Classificacao();
				classificacao = cDAO.buscaPorId(classificacaoSelecionada.getId());
				this.classificacaoSelecionada = classificacao;
				this.novaPublicacao.setClassificacao(classificacaoSelecionada);

				/* Faixa de Custo */
				FaixaCusto faixaCusto = new FaixaCusto();
				faixaCusto = fcDAO.buscaPorId(faixaSelecionada.getId());
				this.faixaSelecionada = faixaCusto;
				this.novaPublicacao.setFaixaCusto(faixaSelecionada);

				/* Fonte de origem */
				FonteOrigem fonteOrigem = new FonteOrigem();
				fonteOrigem = foDAO.buscaPorId(fonteSelecionada.getId());
				this.fonteSelecionada = fonteOrigem;
				this.novaPublicacao.setFonteOrigem(fonteSelecionada);

				/* Usuario */
				Usuarios usuario = new Usuarios();
				usuario = uDAO.buscarPorId(publicadoPor.getId());
				this.publicadoPor = usuario;
				this.novaPublicacao.setPublicadoPor(publicadoPor);

				/* Tipo de arquivo */
				TipoArquivo tipoArquivo = new TipoArquivo();
				tipoArquivo = taDAO.buscaPorId(tipoArquivoSelecionado.getId());
				this.tipoArquivoSelecionado = tipoArquivo;
				this.novaPublicacao.setTipoArquivo(tipoArquivoSelecionado);

				/* Chama o metodo para gerar novo id */
				gerarNovoId();

				/*
				 * grava o novo artigo no banco e salva o arquivo upado no diretorio
				 * especificado
				 */

				pDAO.insere(this.novaPublicacao);
				arquivo.gravar();

				
			} catch (Exception e) {
				
				e.printStackTrace();
			}
			
			this.novaPublicacao = new Publicacao();
			this.tipoArquivoSelecionado = new TipoArquivo();
			this.publicadoPor = new Usuarios();
			this.fonteSelecionada = new FonteOrigem();
			this.faixaSelecionada = new FaixaCusto();
			this.classificacaoSelecionada = new Classificacao();
			this.eventoSelecionado = new Evento();
			this.entidadeSelecionada = new Entidade();
			
			

	}

o método para gravar que está no DAO:

public void insere(Publicacao publicacao) {
		this.entityManager.persist(publicacao);
		this.entityManager.flush();

	}
Criado 16 de maio de 2012
Ultima resposta 16 de mai. de 2012
Respostas 8
Participantes 3