Pessoal,
Estou criando um projeto como maven-archetype-j2ee-simple, um projeto web que envolve JSF e Prime faces.
Estou tentando customizar as mensagem de erro do BeanValidador para apresentar o nome do campo mais a mensagem de erro.
O que eu fiz foi:
Criei um arquivo chamado Messages.properties.
Configurei o faces-config.xml colocando o message-budle
Porém, quando clico no campo para testar a validação é apresentada a mensagem :
16:01:03,369 WARNING [javax.enterprise.resource.webcontainer.jsf.lifecycle] (http–127.0.0.1-8080-3) Can’t find bundle for base name br.com.project.mensagem.Messages, locale pt_BR: java.util.MissingResourceException: Can’t find bundle for base name br.com.project.mensagem.Messages, locale pt_BR
Em medida de desespero, já coloquei esta estrutura(br.com.project.mensagem) dentro de todas as pastas dos modulos (ejb, war, ear e model) mas mesmo assim não funcionou.
Teriam uma ideia de qual e o lugar correto? OU, como faço para descobrir o local que o meu faces-config.xml toma como padrão essa leitura? pois, certamente o mesmo deve estar procurando o br.com.project.mensagem.Messages.properties dentro de alguma diretório raiz (ex: war/src)
<?xml version="1.0" encoding="UTF-8"?>
<faces-config
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"
version="2.2">
<application>
<message-bundle>br.com.project.mensagem.Messages</message-bundle>
<locale-config>
<default-locale>pt_BR</default-locale>
</locale-config>
</application>
</faces-config>
Boa tarde,
Altere o seu faces-config para:
<application>
<view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
<locale-config>
<default-locale>pt_BR</default-locale>
<supported-locale>pt_BR</supported-locale>
</locale-config>
<message-bundle>messages</message-bundle>
</application>
salve o seu arquivo .properties com o nome de messages_pt_BR.properties
dentro da pasta src/main/resources
Funcionou perfeitamente.
Só não consegui e não foi necessário colocar a linha:
<view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
A IDE apresenta a mensagem:
view-handler references to non-existent class “com.sun.facelets.FaceletViewHandler”
Mas resolveu o problema. Muito obrigado!
Pessoal, acabei de precipitando na resposta. Não vi direito que para alguns campos que utilizo o bean validator do hibernate, a mensagem não está sendo apresentada corretamente. É apresentado o id do campo. “j_idt30”
Como pode ser visto, no campo onde uso @NotBlank, que vem org.hibernate.validator.constraints.NotBlank, não esta funcioando.
Para o @NotNull, que vem do import javax.validation.constraints.NotNull, o mesmo funcionou perfeitamente.
Tentei realizar algumas alterações no projeto mas sem sucesso. para os que vem da classe org.hibernate.validator.constraints.* a mensagem customizada não é apresentada corretamente.
Alguém teria uma ideia do que pode ser?
Pessoal, consegui resolver.
O meu problema estava acontecendo devido ao uso de <h:outputText>
. Simplesmente troquei, em to o projeto para <p:outPutLabel>
.
Lembrando sempre se amarrar o for do label com o id do componente que receberá os dados.
Bom dia,
Um forma de fazer isso tbm é dentro do h:inputText voce usar o parametro label.
<h:inputText id="nome" size="60" maxlength="80" value="#{cadastroProdutoBean.produto.nome}" label="#{messages['label.produto.nome']}" />
1 curtida