JSF - Mensagens

Alguém poderia me mostrar uma mensagem simples em JSF utilizando um arquivo com as mensagens guardadas nele?

ta querendo dizer mensagens de erros etc :?:

Isso mesmo.

:wink:

olha o que eu faço é criar um arquivo .properties, nele por exemplo eu altero as mensagens padrões em inglês e coloco as que eu quero, colocando a chave que é padrão fornecida no JSF e um valor que é o que eu altero… mas isto apenas nas validações que já são suportadas pelo JSF…

agora se for uma validação que vc criou, ai desse jeito eu apenas usei fazendo ligação direta na página e não pegando do arquivo …

Você poderima me mostrar um exemplo bem simples disso? É que sou novo demais em programação web e com JSF nem se fala.

:wink:

[quote=anderson.bonavides]Você poderima me mostrar um exemplo bem simples disso? É que sou novo demais em programação web e com JSF nem se fala.

;)[/quote]

coloco sim…

por exemplo dentro da minha aplicação tenho um arquivo messages.properties que eu criei…
estas linhas abaixo:
aqui tenho um campo jsf dizendo que é obrigatório:

<h:inputText id="matricula" style="margin-left:7%; width :137px;" maxlength="6" value="#{userBean.pessoa.matricula}" required="true"> <f:validateLength minimum="6"/> <f:validateLongRange/> </h:inputText>
veja que eu especifico que é required=“true”, então a mensagem seria padrão e em inglês…
nesse caso vou no arquivo properties, e coloco a chave da valição do jsf para campos obrigatórios, e coloco o seguinte:

javax.faces.component.UIInput.REQUIRED= O valor é obrigatório
nesse caso a chave é fornecida pela sun, tenho a tabela em um livro do jsf, mas vc deve achar na net essa tabela, e depois coloquei meu valor “O valor é obrigatório”, ai vc colocaria q vc quisesse… porque o JSF vai procurar se vc tem algum .properties com essa chave, caso não, ele usa o padrão…

outro exemplo…
quando vc coloca uma quantidade mínima de caracteres, no jsf vc como coloquei na tag acima:

  <f:validateLength minimum="6"/>

porém está mensagem vem padrão e nada intuitiva…
a chave dessa validação no jsf é esta abaixo, então eu adiciono o novo valor que quero mostrar, quando a pessoa inserir menos caracteres do que o esperado ele mostra a mensagem personalidaza, o “{0}” mostra número de caracteres que vc colocou lá na tag, no caso acima eu coloquei minimum=“6”…

javax.faces.validator.LengthValidator.MINIMUM=Valor menor que o mínimo de caracteres "{0}"

flw Hewerton

Humm legal Helton muito bom. Vou colocar para funcinar desta forma.
Obrigado pela força.

:slight_smile:

[quote=anderson.bonavides]Humm legal Helton muito bom. Vou colocar para funcinar desta forma.
Obrigado pela força.

:)[/quote]

por nada…disponha…

se quiser me manda uma MP, tenho um excelente pdf de java server faces, é minha referência pra tudo, inclusive tem esta tabela que mencionei…o jsf tem muitos validadores prontos…então vc apenas muda a mensagem…

flw Hewerton

p.s. é Hewerton :lol:

haha

Ok obrigado Hewerton.

:lol:

Você poderia especificar bem que tabela é essa?
Tentei procurar algo no google a respeito mas não encontrei nada.

Hewerton duvida esclarecida. Mas agora surgiu outra duvida. Se por acaso eu quiser fazer de outra forma. Jogando as mensagens no arquivo propeties e em seguida mando localizar através do meu metodo fazendo +/- da seguinte forma:

if(userLogar == null){
FacesContext.getCurrentInstance().addMessage("MSG01", new FacesMessage("camposObrigatorios"));
}

Tem como?

ta aew esta e uma classe utilitaria para carregar mesnsagens do pacote de recursos.

package com.Lgweb.Tcc.Util;
	import java.text.MessageFormat;
	import java.util.Locale;
	 import java.util.MissingResourceException;
	import java.util.ResourceBundle;
	import javax.faces.application.Application;
	import javax.faces.application.FacesMessage;
	 import javax.faces.component.UIViewRoot;
	 import javax.faces.context.FacesContext;
	
	 public class Messages {
	 public static FacesMessage getMessage(String bundleName, String resourceId,
	 Object[] params) {
	 FacesContext context = FacesContext.getCurrentInstance();
	 Application app = context.getApplication();
	 String appBundle = app.getMessageBundle();
	 Locale locale = getLocale(context);
	 ClassLoader loader = getClassLoader();
	 String summary = getString(appBundle, bundleName, resourceId,
	 locale, loader, params);
	 if (summary == null) summary = "???" + resourceId + "???";
	 String detail = getString(appBundle, bundleName, resourceId + "_detail",
	 locale, loader, params);
	 return new FacesMessage(summary, detail);
	 }
	
	 public static String getString(String bundle, String resourceId,
	 Object[] params) {
	 FacesContext context = FacesContext.getCurrentInstance();
	 Application app = context.getApplication();
	 String appBundle = app.getMessageBundle();
	 Locale locale = getLocale(context);
	 ClassLoader loader = getClassLoader();
	 return getString(appBundle, bundle, resourceId, locale, loader, params);
	 }
	
	 public static String getString(String bundle1, String bundle2,
	 String resourceId, Locale locale, ClassLoader loader,
	 Object[] params) {
	 String resource = null;
	 ResourceBundle bundle;
	
	 if (bundle1 != null) {
	 bundle = ResourceBundle.getBundle(bundle1, locale, loader);
	 if (bundle != null)
	 try {
	 resource = bundle.getString(resourceId);
	 } catch (MissingResourceException ex) {
	 }
	 }
	 if (resource == null) {
		 bundle = ResourceBundle.getBundle(bundle2, locale, loader);
		 if (bundle != null)
		  try {
		  resource = bundle.getString(resourceId);
		  } catch (MissingResourceException ex) {
		  }
		  }
		 
		  if (resource == null) return null; // no match
		  if (params == null) return resource;
		 
		  MessageFormat formatter = new MessageFormat(resource, locale);
		  return formatter.format(params);
		  }
		 
		  public static Locale getLocale(FacesContext context) {
		  Locale locale = null;
		  UIViewRoot viewRoot = context.getViewRoot();
		  if (viewRoot != null) locale = viewRoot.getLocale();
		  if (locale == null) locale = Locale.getDefault();
		  return locale;
		  }
		 
		  public static ClassLoader getClassLoader() {
		  ClassLoader loader = Thread.currentThread().getContextClassLoader();
		  if (loader == null) loader = ClassLoader.getSystemClassLoader();
		  return loader;
		  }
		  }
	


depois vc pode chamar assim:


 FacesMessage messageExport
   		  = com.Lgweb.Tcc.Util.Messages.getMessage(     //pacote onde se encontra a classe no meu caso Messages
   		  "com.Lgweb.Tcc.Model.messages", "checkqtd", null);  //pacote de recursos e a key (checkqtd)da mensagem 
    		 messageExport.setSeverity(FacesMessage.SEVERITY_INFO);  
    		 FacesContext fc = FacesContext.getCurrentInstance();
    	        fc.addMessage(null, messageExport);

espero que ajude,flws;

Obrigado vou dar uma olhada com calma.

:wink:

Pessoal, também estou com uma dúvida parecida: preciso recuperar uma mensagem do meu arquivo .properties que contem as mensagens de minha aplicação dentro de um método no meu managed bean.
Só está ocorrendo o seguinte erro:

ERROR [STDERR]  java.util.MissingResourceException: Can't find resource for bundle org.jboss.seam.core.SeamResourceBundle, key #{msgAgendamento.disponivel}
ERROR [STDERR] 	at java.util.ResourceBundle.getObject(Unknown Source)
ERROR [STDERR] 	at java.util.ResourceBundle.getString(Unknown Source)
...

Eu faço a chamada da seguinte forma no metodo do meu bean:

FacesMessage messageExport = Messages.getMessage( "msgagendamento", toolTip, null);

Este property msgAgendamento, foi definido no faces-config.xml, e funciona sendo chamado direto das páginas.
Alguém sabe como posso resolver isso??

como que coloco cor nas minhas mensagem :?:
vlw

[quote=michael roberto]como que coloco cor nas minhas mensagem :?:
vlw[/quote]

Já escutou falar em CSS? Se a resposta for não então de uma olhada neste site: http://www.abpsoft.com/criacaoweb/cssguiaref.html e também neste: http://maujor.com/tutorial/sintaxetut.php