Cara, as vzs é pq na sua jsp ta pegando a msg padrão que é detail. Tenta colocar essas linhas novas que
adicionei e ve se funciona.
error_pt_BR.properties
javax.faces.component.UIInput.REQUIRED={0} deve ser preenchido
javax.faces.component.UIInput.REQUIRED_detail={0} deve ser preenchido
error_en_US.properties
javax.faces.component.UIInput.REQUIRED={0} must be entered
javax.faces.component.UIInput.REQUIRED_detail={0} must be entered
Flw
renomoto
Legal, indo por essa linha…
Como trabalhar com mensagens na parte do MB e Persistencia.
Por exemplo,
ManageBean
Aqui vc tem os dados que vem do jsp e vc encaminha pro Gerenciador que irá persistir os dados.
Como eu vou mandar as mensagens internacionalizadas? Pq vai depender do LOCALE que está configurado.
Classe Gerenciador
Nessa classe vc tem a persitencia, se vc tiver alguma mensagem de erro como passar? vc vai depender do LOCALE que está configurado. vc irá passar como parametro para a classe?
Não sei se ficou claro.
mas se alguem tiver ideias de como passar.
[]'s
Jair_Rillo_Junior
Segue o exemplo de um método, que retorna mensagem de erro (com internacionalização) diretamente de um ManagedBean para a Interface
protectedvoidaddErrorMessage(StringclientId,Stringkey){// Look up the requested message textStringtext=null;try{ResourceBundlebundle=ResourceBundle.getBundle("messages",facesContext.getViewRoot().getLocale());text=bundle.getString(key);}catch(Exceptione){System.out.println(e.toString());}// Construct and add a FacesMessage containing itfacesContext.addMessage(clientId,newFacesMessage(FacesMessage.SEVERITY_ERROR,text,text));}
No exemplo acima, eu estou usando um arquivo chamado messages.properties, ai no caso de internacionalização, pode se usar messages_pt_BR.properties, e etc
renomoto
Blz… e se vc tiver uma mensagem na classe q vc chama no MB vc vai passar o LOCALE como parametro?
[]'s
L
Leonardo3001
renomoto:
Classe Gerenciador
Nessa classe vc tem a persitencia, se vc tiver alguma mensagem de erro como passar? vc vai depender do LOCALE que está configurado. vc irá passar como parametro para a classe?
O que o ManchesteR falou está correto, mas eu preciso lembrar de uma coisa: nunca exiba mensagens de camadas de negócio na sua tela de apresentação. Essas mensagens servem apenas para os desenvolvedores, não para os usuários do sistema. O ideal é criar uma família de classes de exceções; e no managed bean, pra cada tipo de exceção, gera uma mensagem de erro diferente.
No Managed Bean, buscar mensagem de resource bundle é isso:
um jsp que tem sua validações e qdo satisfazer passa para o MB se eu quiser fazer validações e mandar msg posso utilizar o método descrito acima.
mas se tiver uma outra classe que chama e gera excecao como fazer para passar msg.
bom, se vc explicou isso no q vc’s falaram coloca um exemplo q eu viajei.
Jair_Rillo_Junior
Mais ou menos assim:
Não tente gerar as mensagens de erro do seu BEAN, Camada de negocio, de dominio, que seja… diretamente para a camada de apresentação.
Ao invés disso, você deve fazer que essas classes gerem exceções, e essas exceções devem ser tratadas no ManagedBean. Ele sim irá preparar as mensagens de erro.
Algo do tipo
Bean
public class MyBean() {
public void fazAlgumaCoisaDaMinhaRegraDeNegocio() throws UmaExceptionQualquer {
//
}
}
No seu ManagedBean, que você deve tratar a exception e preparar menagem de erro para a camada de apresentação
entao vc ta me dizendo q se eu quiser fazer qualquer validacao eu faco no MB ou no Bean e lanco a excecao e exibo a mensagem de erro?
[]s
L
Leonardo3001
renomoto:
entao vc ta me dizendo q se eu quiser fazer qualquer validacao eu faco no MB ou no Bean e lanco a excecao e exibo a mensagem de erro?
[]s
Não.
A validação é feita em qualquer objeto de negócio. O que eu quero dizer, é que no momento em que a validação falhar, não será gerada uma mensagem do tipo:
throw new Exception("Usuario " + userId + " inexistente");
mas sim algo do tipo:
throw new UsuarioInexistenteException(userId);
A validação não pode ser adiada para alguma outra camada (ficaria difícil de debugar), o que o Managed Bean deve fazer é simplesmente tratar todas as exceções de chamadas a outros objetos.
R
raf4ever
Coloquei,e nada…Alguem tem mais alguma ideia?
Grato
Jair_Rillo_Junior
Como está seu faces-config.xml? Referente a parte de Resource Bundle?
Onde você está deixando os arquivos error*.properties? qual diretorio?
R
raf4ever
Estou colocando na raiz do /src,e no faces-config estou fazendo assim:
[code] error
E tenho os arquivos error_pt_BR.properties,error_en_UK.properties etc...
Abraço
Jair_Rillo_Junior
tem o arquivo error.properties?
Se nao, cria ele apenas para teste e verifica se funciona
R
raf4ever
Criei,e estranhamente não funcionou…
Jair_Rillo_Junior
Poe estranho.
Não sei se você ainda fez isso, mas na tag <f:view> poe o seguinte atributo:
onde locale eh um java.util.Locale que eu monto dinamicamente,e isso funciona direitinho…
Jair_Rillo_Junior
o que eu te passei, é um default do JSF. É indicado usar ele quando quer trabalhar com internacionalização.
Testa o que eu te passei e ve se funciona
Se não funcionar meu amigo, ai eu não tenho mais dicas
R
raf4ever
Pessoal,
com relação ás mensagens de erro,agora está acontecendo o seguinte:
estou usando o jsf 1.1(SUN RI) ,e ao submeter um form com um campo obrigatório está sendo mostrado isso na tela:
{0}is required
ou seja,é como se o id do campo não fosse encontrado.
Me disseram que só a partir do JSF 1.2 é que o “{0}” é substituido pelo id do campo,alguem sabe se é assim mesmo?
Obrigado,
Rafael Roque
J
jean.baldessar
Comigo isso também acontece… tudo é exibido com o {0}…