Validações Primefaces

4 respostas
A

Boa noite galera,
no site do prime faces vi tem um componente chamado Growl
gostaria de usar ele para minhas validações, porem não sei com usar.
gostaria da ajuda de vocês

minha pagina lista todos os grupos de produto e na lista tem os botoes de incluir, alterar e excluir
porem eles são dialogs, o que eu gostaria de fazer é: quando o usuário não preencher o campo descrição e clicar em gravar a dialog ficasse aberta e aparecesse atras
a mensagem em vermelho de que o campo descrição é obrigatório e quando ele preenchesse normalmente aparecesse uma mensagem em azul dizendo que foi gravado com sucesso
alguém poderia me ajudar?
desde já agradeço

minha pagina listar

<?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:h="http://java.sun.com/jsf/html"
	xmlns:p="http://primefaces.org/ui"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:ui="http://java.sun.com/jsf/facelets">

<h:head>
	<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
	<title>Grupo de Produto</title>
</h:head>

<ui:decorate template="/template/padrao.xhtml">
    <ui:define name="centro">

	<p:panel header="Cadastrar Grupo Produto"> 
		<h:form id="grupoProdutoForm">
			<p:commandButton value="Adicionar Registro" icon="ui-icon-plus" update=":grupoProdutoCreateDialogForm"
				actionListener="#{grupoProdutoBean.resetGrupoProduto}" onclick="incluirGrupoProduto.show();" />
			
			<p:dataTable id="grupoProdutoTable" value="#{grupoProdutoBean.allGrupoProduto}" var="grupoProduto"
				emptyMessage="Nenhum registro para ser exibido!">
				
				<p:column>
					<f:facet name="header">
						<h:outputText value="Descrição" />
					</f:facet>
					<h:outputText value="#{grupoProduto.descricao}" />
				</p:column>

				<p:column styleClass="colunaAcoes">
					
					<f:facet name="header">
						<h:outputText value="Ações" />
					</f:facet>
					
					<p:commandButton icon="ui-icon-pencil" update=":alterarGrupoProdutoForm" onclick="alterarGrupoProduto.show();">
						<f:setPropertyActionListener target="#{grupoProdutoBean.grupoProduto}" value="#{grupoProduto}" />
					</p:commandButton>	
					<p:spacer width="1px" />
						
					<p:commandButton icon="ui-icon-trash" update=":deletarGrupoProdutoForm" onclick="deletarGrupoProduto.show();">
						<f:setPropertyActionListener target="#{grupoProdutoBean.grupoProduto}" value="#{grupoProduto}" />
					</p:commandButton>
					
				</p:column>

			</p:dataTable>

		</h:form>
	</p:panel>
	
	</ui:define>
</ui:decorate>

	<ui:include src="/grupoproduto/dialogs/alterargrupoproduto.xhtml" />
	<ui:include src="/grupoproduto/dialogs/incluirgrupoproduto.xhtml" />
	<ui:include src="/grupoproduto/dialogs/deletargrupoproduto.xhtml" />

</html>

incluirgrupoproduto.xhtml
minha dialog que uso para fazer a inclusão do grupo de produto.

<!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:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:p="http://primefaces.org/ui">

	<p:dialog widgetVar="incluirGrupoProduto" id="grupoProdutoCreateDialogId" height="100" width="300" modal="true"
		closable="true" draggable="false" resizable="false" header="..:: Grupo produto ::..">
		
		<h:form id="grupoProdutoCreateDialogForm" prependId="false">
		
		<p:growl id="growl" showDetail="true" sticky="true" />
			<h:panelGrid columns="3">
				<h:outputLabel value="Descrição: " for="desc"/>
				
				<p:inputText id="desc" value="#{grupoProdutoBean.grupoProduto.descricao}" required="true">
				 	<f:validateLength minimum="2" />
				 	<p:ajax update="growl" event="keyup" />
				</p:inputText>
				<p:message for="desc" display="icon" id="msgDesc"/>
				

				<p:commandButton value="Gravar" icon="ui-icon-plus" action="#{grupoProdutoBean.createGrupoProduto}"
					update=":grupoProdutoForm:grupoProdutoTable" oncomplete="incluirGrupoProduto.hide();" />
				
				<p:commandButton value="Cancelar" icon="ui-icon-cancel" actionListener="#{grupoProdutoBean.resetGrupoProduto}"
					onclick="incluirGrupoProduto.hide();" type="button" />
			</h:panelGrid>
		</h:form>
	</p:dialog>

</html>

alterargrupoproduto.xhtml

<!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:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:p="http://primefaces.org/ui">

	<p:dialog widgetVar="alterarGrupoProduto" id="alterarGrupoProdutoDialogId" height="150" width="500" modal="true"
		closable="true" draggable="false" resizable="false">
		
		<h:form id="alterarGrupoProdutoForm" prependId="false">
			<h:panelGrid columns="2">
				<h:outputText value="* Descrição: " />
				<h:inputText value="#{grupoProdutoBean.grupoProduto.descricao}" required="true"/>
				
				<p:commandButton value="Alterar" icon="ui-icon-plus" action="#{grupoProdutoBean.updateGrupoProduto}"
					update=":grupoProdutoForm:grupoProdutoTable" oncomplete="alterarGrupoProduto.hide()" />
				
				<p:commandButton value="Cancelar" icon="ui-icon-cancel" actionListener="#{grupoProdutoBean.resetGrupoProduto}"
					onclick="alterarGrupoProduto.hide();" type="button" />
			</h:panelGrid>
		</h:form>
	</p:dialog>

</html>

deletargrupoproduto.xhtml

<!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:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:p="http://primefaces.org/ui">

	<p:dialog widgetVar="deletarGrupoProduto" id="deletarGrupoProdutoDialogId" 
		height="150" width="500" modal="true" closable="true"
		draggable="false" resizable="false">
		
		<h:form id="deletarGrupoProdutoForm" prependId="false">
			Deseja excluir o registro?
			<br/> 
			<h:outputText value="#{grupoProdutoBean.grupoProduto.descricao}" />
			<br />
			<br />

			<p:commandButton value="Excluir" icon="ui-icon-plus" action="#{grupoProdutoBean.deleteGrupoProduto}"
				update=":grupoProdutoForm:grupoProdutoTable" oncomplete="deletarGrupoProduto.hide()" />
			<p:commandButton value="Cancelar" icon="ui-icon-cancel" actionListener="#{grupoProdutoBean.resetGrupoProduto}"
				onclick="deletarGrupoProduto.hide();" type="button" />
		</h:form>
	</p:dialog>

</html>

grupoProdutoBean

package br.com.unip.menudroidweb.bean;

import java.io.Serializable;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.application.FacesMessage.Severity;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import br.com.unip.menudroidweb.facade.GrupoProdutoFacade;
import br.com.unip.menudroidweb.model.GrupoProduto;

@ViewScoped
@ManagedBean (name = "grupoProdutoBean")
public class GrupoProdutoBean extends AbstractBean implements Serializable {
	private static final long serialVersionUID = 8919740885431798369L;
	
	private GrupoProduto grupoProduto;
	private List<GrupoProduto> grupoProdutoLista;
	private GrupoProdutoFacade grupoProdutoFacade;

	public GrupoProdutoFacade getGrupoProdutoFacade() {
		if (grupoProdutoFacade == null) {
			grupoProdutoFacade = new GrupoProdutoFacade();
		}

		return grupoProdutoFacade;
	}

	public GrupoProduto getGrupoProduto() {
		if (grupoProduto == null) {
			grupoProduto = new GrupoProduto();
		}

		return grupoProduto;
	}

	public void setGrupoProduto(GrupoProduto grupoProduto) {
		this.grupoProduto = grupoProduto;
	}
	
	public void createGrupoProduto() {
		try {
			if(grupoProduto.getDescricao() ==  ""){
				FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Campo descrição obrigadório!"));
			}
			getGrupoProdutoFacade().createGrupoProduto(grupoProduto);
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Grupo salvo com sucesso!"));
			closeDialog();
			//displayInfoMessageToUser("Registro criado com sucesso!");
			loadGrupoProduto();
			resetGrupoProduto();
		} catch (Exception e) {
			keepDialogOpen();
			//displayErrorMessageToUser("Ocorreu um erro na transação! Tente novamente.");
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Problema ao realizar a transação"));
			e.printStackTrace();
		}
	}
	
	public void updateGrupoProduto() {
		try {
			getGrupoProdutoFacade().updateGrupoProduto(grupoProduto);
			closeDialog();
			displayInfoMessageToUser("Registro alterado com sucesso!");
			loadGrupoProduto();
			resetGrupoProduto();
		} catch (Exception e) {
			keepDialogOpen();
			displayErrorMessageToUser("Ocorreu um erro na transação! Tente novamente.");
			e.printStackTrace();
		}
	}
	
	public void deleteGrupoProduto() {
		try {
			getGrupoProdutoFacade().deleteGrupoProduto(grupoProduto);
			closeDialog();
			displayInfoMessageToUser("Registro excluído com sucesso!");
			loadGrupoProduto();
			resetGrupoProduto();
		} catch (Exception e) {
			keepDialogOpen();
			displayErrorMessageToUser("Ocorreu um erro na transação! Tente novamente.");
			e.printStackTrace();
		}
	}

	public List<GrupoProduto> getAllGrupoProduto() {
		if (grupoProdutoLista == null) {
			loadGrupoProduto();
		}

		return grupoProdutoLista;
	}

	private void loadGrupoProduto() {
		grupoProdutoLista = getGrupoProdutoFacade().listAll();
	}

	public void resetGrupoProduto() {
		grupoProduto = new GrupoProduto();
	}
	
	public String redirecionar(){
		return "/grupoproduto/listar.xhtml";
	}
}

ahh mais uma coisa, esse é uma validação de apenas um campo, eu validar assim com o primefaces está correto?
ou seria melhor usar outra ferramenta tipo javascript
porque vai ter validações do tipo cnpj, email, campos numéricos, etc…

4 Respostas

A

alguém?

aprendizweb

Fala garoto!!

Bom pelo o que observei vc esta esquecendo de adicionar o id do seu p:growl no update do p:commandButton correspondente:
<p:growl id="growl" showDetail="true" sticky="true" />

<p:commandButton value="Adicionar Registro" icon="ui-icon-plus" update="growl"  
    actionListener="#{grupoProdutoBean.resetGrupoProduto}" onclick="incluirGrupoProduto.show();" />
A
aprendizweb:
Fala garoto!! Bom pelo o que observei vc esta esquecendo de adicionar o id do seu p:growl no update do p:commandButton correspondente:
<p:growl id="growl" showDetail="true" sticky="true" />

<p:commandButton value="Adicionar Registro" icon="ui-icon-plus" update="growl"  
    actionListener="#{grupoProdutoBean.resetGrupoProduto}" onclick="incluirGrupoProduto.show();" />

iae :D

então eu adicionei esse update inclusive adicionei no botão cadastrar da dialog pois o botão adicionar registro abre a dialog só

<p:commandButton value="Gravar" icon="ui-icon-plus" action="#{grupoProdutoBean.createGrupoProduto}"
					update=":grupoProdutoForm:grupoProdutoTable" oncomplete="closeDialogIfSucess(xhr, status, args, incluirGrupoProduto, 'grupoProdutoCreateDialogId')" />

e não funcionou

=/

aprendizweb

então, adicione growl no update, como abaixo:

<p:growl id="growl"/>

<p:commandButton value="Gravar" icon="ui-icon-plus" action="#{grupoProdutoBean.createGrupoProduto}"
					update=":grupoProdutoForm:grupoProdutoTable growl" oncomplete="closeDialogIfSucess(xhr, status, args, incluirGrupoProduto, 'grupoProdutoCreateDialogId')" />
Criado 23 de setembro de 2012
Ultima resposta 24 de set. de 2012
Respostas 4
Participantes 2