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() < 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]
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: :confused:](//www.guj.com.br/images/emoji/twitter/confused.png?v=6)
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: :confused:](//www.guj.com.br/images/emoji/twitter/confused.png?v=6)
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.