Problema com JSF

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:

[code]<%@ 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”%>

.:Cadastro Usuario:.
		<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>

[/code]

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

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

[quote=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[/quote]

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

[code]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;
}

}
[/code]

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?

Sim Sim

[code]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;
}

}[/code]

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)

Agora que reparei que você duplicou seu post.

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í:

[code]<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}" />[/code]

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

[quote=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[/quote]

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í. [=

[quote=jakefrog]Agora que reparei que você duplicou seu post.

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í:

[code]<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}" />[/code][/quote]

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 … :confused:

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”

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.

[quote=jakefrog][quote=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[/quote]

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í. [=[/quote]

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

Então coloca aí:

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

[quote=jakefrog]Então coloca aí:

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

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:

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

Aki:

[code]<%@ 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”%>

.:Cadastro Usuario:.
		<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>

[/code]

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

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

[quote=jakefrog]Cara, olha teu botão novamente com o actionListiner…

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

Ta com erro no meu botão??

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

Novamente, troca de actionListener para action.

Valeu. [=

[quote=jakefrog]Novamente, troca de actionListener para action.

Valeu. [=[/quote]

Dá o erro:

javax.servlet.ServletException: #{cadastroUsuarioBean.cadastrar}: org.apache.jasper.el.JspMethodNotFoundException: /cadastrarUsuario.jsp(42,5) '#{cadastroUsuarioBean.cadastrar}' Method not found: com.algaworks.dwjsf.visao.CadastroUsuario@1886a34.cadastrar() javax.faces.webapp.FacesServlet.service(FacesServlet.java:277)

O método tem que retorna null ??

Tem que retornar null quando dá erro.

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