Validator JSF ajuda por favor!

	public void valida(FacesContext arg0, UIComponent arg1, Object arg2)throws ValidatorException {
			if(pojo.getPersisServ().getNomeServidor().trim().equals("") ){
				FacesMessage mensagem2 = new FacesMessage("");
				mensagem2.setSummary("Nome em Branco.");
	mensagem2.setSeverity(FacesMessage.SEVERITY_ERROR);
	throw new ValidatorException(mensagem2);	
}
}

<h:outputText value="Nome " styleClass="label"></h:outputText> <h:inputText value="#{bean.pojo.persisServ.nomeServidor}" validator="#{bean.valida}" size="50" id="nome" />

ele nao chama meu metodo, ja debuguei e tudo, mas nao chega a chamar o metodo…
ai quando vc preenche o campo ele chama o metodo…

??
pq isso
tem q configurar o faces? web.xml ? pra aceitar o validator?

pelo que eu entendi ele so esta chamando o validator quando vc preenche o campo certo?

bom se for somente isso … acho que esta tudo certo… o que vc precisa falar é que o campo é de preenchimento obrigatorio… colocando a tag required=“true”

<h:inputText value="#{bean.pojo.persisServ.nomeServidor}"  required="true" validator="#{bean.valida}"  size="50" id="nome" />

espero ter ajudado…
boa sorte

por sinal … como vc ja usar jsf :smiley: poderia me ajudar e dizer como vc esta fazendo para verificar se o usuario esta logado antes de abrir as paginas jsf ?
nao estou conseguindo bolar uma forma de fazer esta verificação…
em struts eu fazia por superclasse … mas em jsf … nao dá …

abraços

mas nao tem como eu deixar o campo em branco e ele chamar o metodo?
sem precisar ter esse required?

cara nao sou um profundo conhecedor, mas pelo que eu entendi… se nao tiver nada no campo a variavel nem é enviada … por isto nao é chamado o validator …
colocando o required, o seu form nao vai conseguir ser enviado sem o preenchimento do campo…

se vc tiver usando algum framework ajax (ICEfaces por exemplo) , isto fica muito bom … pois quando vc deixa o campo … ja é feita a validação e lanca a mensagem de erro. estou adorando trabalhar com ICEfaces … muito simple e pratico …

entendi…
mas agora to com outro problema…

[code]

  1. public void valida(FacesContext arg0, UIComponent arg1, Object arg2)throws ValidatorException {  
    
  2.         if(pojo.getPersisServ().getNomeServidor().trim().equals("") ){  
    
  3.             FacesMessage mensagem2 = new FacesMessage("");  
    
  4.             mensagem2.setSummary("Nome em Branco.");  
    
  5. mensagem2.setSeverity(FacesMessage.SEVERITY_ERROR);  
    
  6. throw new ValidatorException(mensagem2);      
    
  7. }
  8. } [/code]
  if(pojo.getPersisServ().getNomeServidor().trim().equals("") ){  

minha variavel ta vindo null,
creio que ela vem no UIComponent arg2, como que eu faco pra minha variavel do pojo receber esse valor?

cara , nao entendi seu problema agora… quando esta ocorrendo o problema ? no validator ? esta lançando alguma exception ?
qual a ligação entre os dois trechos de codigo que vc postou ?

boa sorte

eu preenchi o campo blz,
ai ele chama o metodo, na linha em negrito minha variavel ta vindo null, assim da uma nullPointer por tentar usar um trim() nela…
essa variavel minha nao deveria ter o valor do campo que eu digitei?

public void valida(FacesContext arg0, UIComponent arg1, Object arg2)throws ValidatorException { [b] if(pojo.getPersisServ().getNomeServidor().trim().equals("") ){ [/b] FacesMessage mensagem2 = new FacesMessage(""); mensagem2.setSummary("Nome em Branco."); mensagem2.setSeverity(FacesMessage.SEVERITY_ERROR); throw new ValidatorException(mensagem2); } }

nossa … esquece … agora que eu percibi que é parte integrante do codigo … rsrsr

cara … nao sei ao certo, mas pode ser que somente apos validar que o jsf joge a variavel para o objeto desejado …

e sim … vc vai receber o objeto pelo UIComponent …

vou ver aki comoo eu estou fazendo … e posto

pojo.getPersisServ().setNomeServidor(arg2.toString());

assim ele recebe o valor…
mas quando eu tiver date, um Long essas coisas ai nao vai ter como…
eu queria saber como que minha variavel recebe o valor…

e quando eu coloco o required=true, quando o campo fica em branco
eles mostra la
Validation erro : value is required.

como eu faco pra mudar isso pra Digite o valor por exemplo?

Cara …
me me corrijam por favor se eu estiver errado, mas geralmente, quando vc faz o binding do atributo, quando vc esta lá no metodo que recebe o submit as variaves ja estão preenchidas, voce nao deve setar ela manualmente no metodo validator, pios este é o trabalho do framework.

O validator é uma forma de garantir que sua variavel nao será setada com valores indevidos, logo nao me parece razoavel que neste momento seu atributo ja esteja setado na variavel.
faz o teste e verifica se realmente nao esta sendo enviado o valor para o atributo, porém verifica isso no metodo que vc recebe o submit da sua pagina.

<f:commandButton action="#{algum.metodo}"/>

o metodo é o que vc colocou na variavel action no componente commandbutton

como mudar a mensagem eu ainda nao sei . estou aprendendo a usar este framework ainda .
mas eu posto aki
abracos