Problema com JSF

23 respostas
X

Gente eu to estudando JSF com a apostila da alga... tem uma ativiade que é pra mostrar um aviso em cima do formulário e outro ao lado do campo... O que é pra aparecer que cima do formulário aparece corretamente, mais oq é pra aparecer ao lado do campo não aparece:

Aparece esse erro:
INFO: WARNING: FacesMessage(s) have been enqueued, but may not have been displayed.
sourceId=frm:nome[severity=(WARN 1), summary=(Nome inválido!), detail=(Digite nome completo.)]
Meu código é esse:
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>.:Cadastro Usuario:.</title>
</head>
<f:view>
	<body>
		<h:form>
			<h:messages layout="table" errorStyle="color: red"
				infoStyle="color: green" warnStyle="color: orange"
				fatalStyle="color: gray" showDetail="true" globalOnly="true" />

			<h:panelGrid columns="2">
				<f:facet name="header">
					<h:outputText value="Dados para cadastro" />
				</f:facet>
				<h:outputText value="Nome:" />
				<h:panelGroup>
					<h:inputText id="nome" 
						value="#{cadastroUsuarioBean.nome}" />
					<h:message for="nome" />
				</h:panelGroup>
				<h:outputText id="email" value="E-mail:"/>
				<h:panelGroup>
					<h:inputText size="40" maxlength="250" 
						value="#{cadastroUsuarioBean.email}" />
					<h:message for="email" />
				</h:panelGroup>
				<h:outputText value="Senha:" />
				<h:panelGroup>
					<h:inputSecret id="senha" size="20"
						value="#{cadastroUsuarioBean.senha}" />
					<h:message for="senha" />
				</h:panelGroup>
				<h:outputText />
				<h:commandButton id="cadastrar" value="Cadastrar"
					actionListener="#{cadastroUsuarioBean.cadastrar}" />
			</h:panelGrid>

		</h:form>
	</body>
</f:view>
</html>

23 Respostas

mauricioadl

tive um problema assim antigamente, acontecia por causa dos caracteres especiais na mensagem de erro, lembro que quando removia os caracteres a mensagem aparecia certo. faça um teste pra ver.

[]´s

Hebert_Coelho

Tem como você postar o método que trata a ação e coloca a msg aviso no contexto?

X
mauricioadl:
tive um problema assim antigamente, acontecia por causa dos caracteres especiais na mensagem de erro, lembro que quando removia os caracteres a mensagem aparecia certo. faça um teste pra ver.

[]´s

Meu Bean é esse... Tirei todas as carateres especias mais mesmo assim da erro...

package com.algaworks.dwjsf.visao;

import java.util.Calendar;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

public class CadastroUsuario {
	private String nome;
	private String email;
	private String senha;

	public void cadastrar(ActionEvent event) {
		FacesContext context = FacesContext.getCurrentInstance();
		if (this.getNome() != null && this.getNome().length() &lt; 10) {
		context.addMessage(&quot;frm:nome&quot;,
				new FacesMessage(FacesMessage.SEVERITY_WARN,
						&quot;Nome invalido!&quot;,&quot;Digite nome completo.&quot;));
						}
		if (Calendar.getInstance().get(Calendar.DAY_OF_WEEK)== Calendar.FRIDAY) {
		context.addMessage(null,
				new FacesMessage(FacesMessage.SEVERITY_WARN,
						&quot;Dia da semana invalido!&quot;,&quot;Voce nao pode cadastrar usuarios nesse dia.&quot;));
		}
	}	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}

}

Ps: a mensagem "Dia da semana invalido!","Voce nao pode cadastrar usuarios nesse dia.")); aparece normal mesmo com as caracterias especias... Sabe mais algum coisa que pode ser o possível problema?

X
jakefrog:
Tem como você postar o método que trata a ação e coloca a msg aviso no contexto?
Sim Sim
package com.algaworks.dwjsf.visao;

import java.util.Calendar;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

public class CadastroUsuario {
	private String nome;
	private String email;
	private String senha;

	public void cadastrar(ActionEvent event) {
		FacesContext context = FacesContext.getCurrentInstance();
		if (this.getNome() != null && this.getNome().length() < 10) {
		context.addMessage("frm:nome",
				new FacesMessage(FacesMessage.SEVERITY_WARN,
						"Nome invalido!","Digite nome completo."));
						}
		if (Calendar.getInstance().get(Calendar.DAY_OF_WEEK)== Calendar.FRIDAY) {
		context.addMessage(null,
				new FacesMessage(FacesMessage.SEVERITY_WARN,
						"Dia da semana invalido!","Voce nao pode cadastrar usuarios nesse dia."));
		}
	}	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}

}
Essa msg "Nome invalido!","Digite nome completo." não aparece...(ao lado do campo nome) e da o erro:
INFO: WARNING: FacesMessage(s) have been enqueued, but may not have been displayed.
sourceId=frm:nome[severity=(WARN 1), summary=(Nome invalido!), detail=(Digite nome completo.)]

Essa msg "Dia da semana invalido!","Voce nao pode cadastrar usuarios nesse dia. aparece normalmente... (em cima do formulario)

Hebert_Coelho

Agora que reparei que você duplicou seu post.

http://www.guj.com.br/java/258520-problema-com-jsf-facesmessage#1348761

E pior, te dei os caminhos das pedras mas nem isso né?

Tava escrevendo um post sobre isso, hoje devo colocar no ar.

Mas lá vai.

Tenta aí:

<h:messages id="mensagem" layout="table" errorStyle="color: red"  
                infoStyle="color: green" warnStyle="color: orange"  
                fatalStyle="color: gray" showDetail="true" globalOnly="true" />  

<h:commandButton id="cadastrar" value="Cadastrar" update="mensages"  
                    actionListener="#{cadastroUsuarioBean.cadastrar}" />
Master.Abs

Retire o atributo globalOnly=“true” que deve funcionar.

E para apresentar a mensagem ao lado do campo informe o id do seu form nesse caso <h:form id=“frm”>…

Entenda globalonly=“true”

Flw

Hebert_Coelho

Master.Abs:
Retire o atributo globalOnly=“true” que deve funcionar.

E para apresentar a mensagem ao lado do campo informe o id do seu form nesse caso <h:form id=“frm”>…

Entenda globalonly=“true”

Flw

Não acho que seja o globalOnly=“true” pois o botão do primefaces tem chamada ajax por default. Ou seja, ele não ta reinderizando a chamada.

Mas testa aí. [=

X
jakefrog:
Agora que reparei que você duplicou seu post.

http://www.guj.com.br/java/258520-problema-com-jsf-facesmessage#1348761

E pior, te dei os caminhos das pedras mas nem isso né?

Tava escrevendo um post sobre isso, hoje devo colocar no ar.

Mas lá vai.

Tenta aí:

<h:messages id="mensagem" layout="table" errorStyle="color: red"  
                infoStyle="color: green" warnStyle="color: orange"  
                fatalStyle="color: gray" showDetail="true" globalOnly="true" />  

<h:commandButton id="cadastrar" value="Cadastrar" update="mensages"  
                    actionListener="#{cadastroUsuarioBean.cadastrar}" />

Sim, desculpa...
Vc falo pra mim pesquisar sobre uma tag ajax mais eu fiquei com mais duvida... E eu avisei lá, mais vc nãoa falo nada ... :/

Mais em fim..
Assim que eu coloco update="mensages" o eclipse acusa uma erro(na mesma linha...) e a palavra update fica grifada e quando executo e dá o seguinte erro -->"Attribute update invalid for tag commandButton according to TLD"

Hebert_Coelho

Vc não está utilizando primefaces. MyBad. Por isso que está dando esse erro. Realmente ele não tem o componente para isso.

Tenta o seguinte então.<h:commandButton id="cadastrar" value="Cadastrar" update="mensages" action="#{cadastroUsuarioBean.cadastrar}" />

E caso dê o erro, faça com que seu método retorne null ao invés de alguma string.

X

jakefrog:
Master.Abs:
Retire o atributo globalOnly=“true” que deve funcionar.

E para apresentar a mensagem ao lado do campo informe o id do seu form nesse caso <h:form id=“frm”>…

Entenda globalonly=“true”

Flw

Não acho que seja o globalOnly=“true” pois o botão do primefaces tem chamada ajax por default. Ou seja, ele não ta reinderizando a chamada.

Mas testa aí. [=

Eu testei a msg “Nome invalido!”,“Digite nome completo.” aparece em cima do formulário junto com a outra msg, mais ela deve aparecer ao lado do campo nome… =D

Hebert_Coelho

Então coloca aí:

<h:inputText id="nome" value="#{cadastroUsuarioBean.nome}" required="true" requiredMessage="Querido usuário, digita o bagulho aqui por favor." />

X

jakefrog:
Então coloca aí:

<h:inputText id="nome" value="#{cadastroUsuarioBean.nome}" required="true" requiredMessage="Querido usuário, digita o bagulho aqui por favor." />

Eu troquei:

<h:panelGroup> <h:inputText id="nome" value="#{cadastroUsuarioBean.nome}" /> <h:message for="nome" /> </h:panelGroup>
por:

<h:panelGroup> <h:inputText id="nome" value="#{cadastroUsuarioBean.nome}" required="true" requiredMessage="Querido usuário, digita o bagulho aqui por favor." /> <h:message for="nome" /> </h:panelGroup>

E continua na mesma coisa… :confused:

Hebert_Coelho

Posta tua pagina aí novamente para ver como que está.

X
jakefrog:
Posta tua pagina aí novamente para ver como que está.
Aki:
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>.:Cadastro Usuario:.</title>
</head>
<f:view>
	<body>
		<h:form>
			<h:messages  id="mensagem" layout="table" errorStyle="color: red"
				infoStyle="color: green" warnStyle="color: orange"
				fatalStyle="color: gray" showDetail="true" globalOnly="true" />

			<h:panelGrid columns="2">
				<f:facet name="header">
					<h:outputText value="Dados para cadastro" />
				</f:facet>
				<h:outputText value="Nome:" />
				<h:panelGroup>
					<h:inputText id="nome" value="#{cadastroUsuarioBean.nome}"
						required="true"
						requiredMessage="Querido usuário, digita o bagulho aqui por favor." />
					<h:message for="nome" />
				</h:panelGroup>
				<h:outputText id="email" value="E-mail:" />
				<h:panelGroup>
					<h:inputText size="40" maxlength="250"
						value="#{cadastroUsuarioBean.email}" />
					<h:message for="email" />
				</h:panelGroup>
				<h:outputText value="Senha:" />
				<h:panelGroup>
					<h:inputSecret id="senha" size="20"
						value="#{cadastroUsuarioBean.senha}" />
					<h:message for="senha" />
				</h:panelGroup>
				<h:outputText />
				<h:commandButton id="cadastrar" value="Cadastrar"
					actionListener="#{cadastroUsuarioBean.cadastrar}" />
			</h:panelGrid>

		</h:form>
	</body>
</f:view>
</html>
Hebert_Coelho

Cara, olha teu botão novamente com o actionListiner…

<h:commandButton id="cadastrar" value="Cadastrar" actionListener="#{cadastroUsuarioBean.cadastrar}" />

X

jakefrog:
Cara, olha teu botão novamente com o actionListiner…

<h:commandButton id="cadastrar" value="Cadastrar" actionListener="#{cadastroUsuarioBean.cadastrar}" />

Ta com erro no meu botão??

Ha! Tava dando uma olhada nós seus artigos gostei bastante… =D

Hebert_Coelho

Novamente, troca de actionListener para action.

Valeu. [=

X

jakefrog:
Novamente, troca de actionListener para action.

Valeu. [=

Dá o erro:

javax.servlet.ServletException: #{cadastroUsuarioBean.cadastrar}: org.apache.jasper.el.JspMethodNotFoundException: /cadastrarUsuario.jsp(42,5) '#{cadastroUsuarioBean.cadastrar}' Method not found: [email removido]() javax.faces.webapp.FacesServlet.service(FacesServlet.java:277)

O método tem que retorna null ??

Hebert_Coelho

Tem que retornar null quando dá erro.

Quando não tem erro, você envia para a página devida.

X

jakefrog:
Tem que retornar null quando dá erro.

Quando não tem erro, você envia para a página devida.

Eu fiz tb retornando null e deu o mesmo erro… :S

X

Jakefrog se eu colocar meu projeto no SkyDriver, vc baixa para dá uma olhada nesse problema???

Master.Abs

xandi_m5:
jakefrog:
Master.Abs:
Retire o atributo globalOnly=“true” que deve funcionar.

E para apresentar a mensagem ao lado do campo informe o id do seu form nesse caso <h:form id=“frm”>…

Entenda globalonly=“true”

Flw

Não acho que seja o globalOnly=“true” pois o botão do primefaces tem chamada ajax por default. Ou seja, ele não ta reinderizando a chamada.

Mas testa aí. [=

Eu testei a msg “Nome invalido!”,“Digite nome completo.” aparece em cima do formulário junto com a outra msg, mais ela deve aparecer ao lado do campo nome… =D

Voce chegou a fazer isso:

Pelo que eu pude ver no cod anterior o h:form ainda está sem o id.

X
Master.Abs:
xandi_m5:
jakefrog:
Master.Abs:
Retire o atributo globalOnly="true" que deve funcionar.

E para apresentar a mensagem ao lado do campo informe o id do seu form nesse caso ....

Entenda globalonly="true"

Flw

Não acho que seja o globalOnly="true" pois o botão do primefaces tem chamada ajax por default. Ou seja, ele não ta reinderizando a chamada.

Mas testa aí. [=

Eu testei a msg "Nome invalido!","Digite nome completo." aparece em cima do formulário junto com a outra msg, mais ela deve aparecer ao lado do campo nome... =D

Voce chegou a fazer isso:

Master Abs:
para apresentar a mensagem ao lado do campo informe o id do seu form nesse caso
Pelo que eu pude ver no cod anterior o h:form ainda está sem o id.

Sim sim

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>.:Cadastro Usuario:.</title>
</head>
<f:view>
	<body>
		<h:form id="cadastro">
			<h:messages layout="table" errorStyle="color: red"
				infoStyle="color: green" warnStyle="color: orange"
				fatalStyle="color: gray" showDetail="true" globalOnly="true" />
			<h:panelGrid columns="2">
				<f:facet name="header">
					<h:outputText value="Dados para cadastro" />
				</f:facet>
				<h:outputText value="Nome:" />
				<h:panelGroup>
					<h:inputText id="nome" value="#{cadastroUsuarioBean.nome}" />
					<h:message for="nome" />
				</h:panelGroup>
				<h:outputText id="email" value="E-mail:" />
				<h:panelGroup>
					<h:inputText size="40" maxlength="250"
						value="#{cadastroUsuarioBean.email}" />
					<h:message for="email" />
				</h:panelGroup>
				<h:outputText value="Senha:" />
				<h:panelGroup>
					<h:inputSecret id="senha" size="20"
						value="#{cadastroUsuarioBean.senha}" />
					<h:message for="senha" />
				</h:panelGroup>
				<h:outputText />
				<h:commandButton id="cadastrar" value="Cadastrar"
					actionListener="#{cadastroUsuarioBean.cadastrar}" />
			</h:panelGrid>
		</h:form>
	</body>
</f:view>
</html>

Basta colocar o o id no form .jsp ou tem que colocar no .java tb???
O código tá ai com o id, e tá com o mesmo erro... :/

Criado 21 de novembro de 2011
Ultima resposta 22 de nov. de 2011
Respostas 23
Participantes 4