Problemas com componente p:growl

17 respostas
A

Bom galera, estou fazendo uma tela de login e usando o componente p:growl para exibir a mensagem de erro caso esteja em branco os campos do form, acontece que o componente nao esta mais saindo da tela, achei que fosse o navegador testei em outro e aconteceu a mesma coisa. e isso aconteceu tbm no showcase do primefaces. Alguem tem alguma ideia do que pode ser?

o codigo do componente esta assim
<p:growl id=“mensagem” sticky=“true” errorIcon=“Imagens/icones/erro2.png” life=“1000” autoUpdate=“true” />

17 Respostas

M

sticky true faz o growl ficar visible sempre

D

Ola amigo

mostre a ação que chama o growl e outra qual versão do primefaces vc usa porque do 3.1 pra frente o esquema de IDs mudou e pode nao funcionar

Abraços

A

Eu ja resolvi o problema, eu retirei essa parte “sticky=“true”” dai funcionou, esse atributo diz se ele vai permanecer na pagina (ate ser fechado com o clique no x) ou se vai sair pelo tempo determinado. Mesmo assim obrigado.

C

Olá amigos, estou com esse mesmo problema... ja revirei todo o forum pra encontrar uma solução e nada... estou usando o Prime Faces 3.2
Não consigo utilizar o componente p:growl, se troco pra p:messages funfa blz, mas o p:growl não dá certo!
Refiz a minha pagina só para testar como está no exemplo: [url] http://www.primefaces.org/showcase/ui/growl.jsf[/url] e mesmo assim nao consegui.

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

<ui:composition template="_template2.xhtml">
	<ui:define name="content">
		<h:form prependId="false" id="form">
			<p:growl id="growl" showDetail="true" sticky="true" />
				<p:panel header="Growl">
					<h:panelGrid columns="2">
						<h:outputText value="Your Name: *" />
						<p:inputText value="#{testeBean.text}" required="true"
							label="Name" />
					</h:panelGrid>

					<p:commandButton value="Save" actionListener="#{testeBean.teste}"
						update="growl" />
				</p:panel>
		</h:form>
	</ui:define>
</ui:composition>
</html>
Bean
@Named
@ViewScoped
public class TesteBean implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = -4573190377512811384L;
	
	private String text;  
    
    public String getText() {  
        return text;  
    }  
    public void setText(String text) {  
        this.text = text;  
    }  
  
    public void teste(ActionEvent actionEvent) {  
        FacesContext context = FacesContext.getCurrentInstance();  
        System.out.println("Successful Hello " + text);  
        context.addMessage(null, new FacesMessage("Successful", "Hello " + text));  
        context.addMessage(null, new FacesMessage("Second Message", "Additional Info Here..."));  
    }  

}

A ação é executada sem nenhum erro, somente o componente que não é renderizado na tela!

Se alguem puder me ajudar ficaria muito agradecido!

A

Já tentou dar o update em :form:growl ?
Tive um problema parecido aqui e tive que fazer desde o form que estava no template.

C

Olá angelosilvestre, ja tentei tambem essa possibilidade e nada! O p:messages roda tranquilamente…
Alguem consegue usar esse componente (p:growl) do primefaces 3.2? o do 2.2 estava funfando de boa!

Obrigado pela atenção!

A

Estou usando o primefaces 3.2 e quando tive esse problema resolvi referenciando o componente desde os forms do template…
Não ficou algum form que você não referenciou?
Edit:
Você também poderia colocar o growl no seu template, assim acredito que não vai ter nenhum problema só utilizando update=":growl"

C

Estranho, o meu template é simples, nao tem nenhum form, é so a estrutura mesmo.

Segue abaixo o template.

<!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:p="http://primefaces.org/ui">
<h:head>
	<title><ui:insert name="title">Painéis Inteligentes</ui:insert></title>
</h:head>

<h:body>
	<ui:insert name="header">
		<h1>
			<h:outputText value="Cabeçalho" />
		</h1>
	</ui:insert>

	<ui:insert name="content">

	</ui:insert>
	
	<ui:insert name="footer">
		<h:outputText value="Rodapé" />
	</ui:insert>

</h:body>

</html>

Abaixo, o 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">

<ui:composition template="_template2.xhtml">
	<ui:define name="content">
		<h:form id="form">
			<p:growl id="growl" showDetail="true" sticky="true" />
			
				<h:panelGrid id="grid" columns="2">
					<h:outputText id="name" value="Your Name: *" />
					<p:inputText id="inputtext" value="#{testeBean.text}"
						required="true" label="Name" />
				</h:panelGrid>

				<p:commandButton id="btn" value="Save"
					actionListener="#{testeBean.teste}" update=":form:growl" />
		</h:form>
	</ui:define>
</ui:composition>
</html>
Abaixo o Bean.
@Named
@ViewScoped
public class TesteBean implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = -3972630720297924680L;
	private String text;

	public String getText() {
		return text;
	}

	public void setText(String text) {
		this.text = text;
	}

	public void teste() {
		FacesContext context = FacesContext.getCurrentInstance();
		System.out.println("Successful Hello " + text);
		context.addMessage(null,
				new FacesMessage("Successful", "Hello " + text));
		context.addMessage(null, new FacesMessage("Second Message",
				"Additional Info Here..."));
	}

}

Abaixo a saida no console... o metodo esta sendo executado, passa por todas as fases, acredito que o problema é no retorno pra view,
pois o componente nao eh renderizado...
[img]http://dl.dropbox.com/u/17205416/Screen%20Shot%202012-04-02%20at%2021.11.02.png[/img]

... ocorre o erro, acho q nomento do update do componente growl... essa eh a resposata com erro gerada pela requisição...
[img]http://dl.dropbox.com/u/17205416/Screen%20Shot%202012-04-02%20at%2021.03.11.png[/img]

Nao imagino o motivo de isso estar acontencendo, pode ate ser um pequeno detalhe que esteja passando por cima sem
perceber, troquei ate o tema do primefaces...

Mais uma vez, obrigado pela solidariedade e atencao!

A

Tenta colocar o growl dentro do template e faz um teste pra ver
update=":growl" ou update=“growl”

C

Mesma coisa, ocorre o erro gerado pelo Firebug… ja tinha tentando antes colocar o growl no template e fora do form, fazendo o updade no :growl…

A

Tente colocar no form o atributo prependId=false , talvez funcione.

A

Amigo, realmente o erro esta no update do growl, na msg de erro do firebug ele esta mostrando qual é o id do seu growl, olhe la esta assim form:growl vc vai ter que usar o update passando isso ou usar o prependId=false .Espero ter ajudado, se nao ajudou poste o erro novamente.

C

Olá Alexandre 92, na codigo do xhtml eu dou um update=":form:growl"… ja tentei com o prependId=false e dar um update=“growl”… nada dá certo…
No meu projeto eu uso o Prime Faces 2.2… tudo funciona normalmente…
Eu li que no primefaces 3 mudou um pouco essa questao dos updates em componentes…
Um dos motivos que me faz utilizar o novo primefaces nesse meu projeto é a atualizacao do p:tabView, já que agora ele aceita um dataModel, e com o primefaces 2.2 eu misturava jstl com o tabView, o que nao é legal… e dentre outras melhorias dessa nova versao!

Vou refazer e refazer tudo até conseguir… uma hora eu consigo encontrar essa pequena falha!rsrs

Atenciosamente,

A

Tenta colocar o growl fora do form.

C

Tentei colocar fora do form, no template e nada Alexandre92…
Se eu colocar no p:commandButton ajax=false, o componente é renderizado!
Só que o desejado é executar a ação via ajax, sem contar do problema do F5, caso o usuario dê um F5 o browser vai perguntar se ele quer reenviar os dados para a requisição, ai o problema ja sabemos… a acao vai ser executada novamente…

A

Tem como postar o codigo da pagina novamente e o codigo da classe java que trata o evento do commandButton?

A

Caro cmiranda.marcelo acho que descobri seu problema, na versao 3.2 do primefaces o componente growl nao possui o atributo id, entao para resolver o problema vc tera que usar o atributo widgetVar e dai para mostra-lo vc tera que colocar no botao assim onclick=“nome_widgetVar.show();”. Nao sei se vc ja conseguiu resolver e tambem nao sei se vai funcionar pra vc, mas eu testei aki e deu certo. Tambem há a possibilidade de colocar no growl o atributo autoUpdate=true , so que dai todas as mensagens serao exibidas por ele, é uma possibilidade tambem

Criado 9 de março de 2012
Ultima resposta 9 de abr. de 2012
Respostas 17
Participantes 5