[RESOLVIDO]Prime Faces + ajax

Estou validando um campo de email para ver se ele ja se encontra no banco de dados via ajax.
A validação esta funcinando , mas nao consigo deixar o inputText marcado como inválido.
Estou utilizando o componente wizard, logo gostaria de deixar o inputText em vermelho e nao deixar ele avançar até que a opção esteja marcada corretamente.

Alguem saberia como fazer isso sem criar um algum controle com o wizard?

<p:growl id="validaEmail" />
<h:outputText value="? E-mail: " for="email"/>
	<p:inputText  id="email" value="#{usuario.email}"  requiredMessage="Digite um E-mail válido" 
                             validatorMessage="Email inválido. EX:joao@gmail.com" >
			<p:ajax event="blur" update="validaEmaill"  listener="#{usuario.validaEmail()}"  />  // validação via ajax
	</p:inputText>	

[]s

Acho que com <p:outputLabel> resolve.
Veja o exemplo no site do primefaces:
http://www.primefaces.org/showcase-labs/ui/outputLabel.jsf

[quote=ErickRAR]Acho que com <p:outputLabel> resolve.
Veja o exemplo no site do primefaces:
http://www.primefaces.org/showcase-labs/ui/outputLabel.jsf[/quote]

neste exemplo ele so esta validando pelo atributo require do <p:outputLabel>

tinha que dar um jeito de quando eu chamo o metodo de validação conseguir objeto o component <p:inputText> e dizer que ele esta inválido, mas nao sei como fazer isso.
Eu consigo setar uma mensagem dizendo que o email é invalido, mas se o user quiser continuar o cadastro ele consegue.

Alguem sabe como tornar invalido um <p:inputText> em um método?

[]s

Coloque o outputLabel e use o Ajax Validation.
http://www.primefaces.org/showcase-labs/ui/pprAjaxValidations.jsf

Tem varias validações e você pode utilizar a sua, mas como é pro email, acho melhor utilizar <f:validateRegex pattern="">

Ps: No exemplo tá como campo requerido, mas não precisa colocar se quiser.

[quote=ErickRAR]Coloque o outputLabel e use o Ajax Validation.
http://www.primefaces.org/showcase-labs/ui/pprAjaxValidations.jsf

Tem varias validações e você pode utilizar a sua, mas como é pro email, acho melhor utilizar <f:validateRegex pattern="">

Ps: No exemplo tá como campo requerido, mas não precisa colocar se quiser.[/quote]

Acho que eu nao esclareci muito bem o que estou fazendo.
Eu estou fazendo a validação por regex e ate ai tudo bem, como disse, tudo esta funcionando. Mas eu estou utilizando o ajax para ir ate o banco de dados e analisar se o email já se encontra cadastrado no sistema, para que não seja possivel colocar dois emails iguais no sistema. Se o sistema acha o email no sistema, nao consigdo deixar aquele campo como inválido.ou seja, o <p:inputText> ficar vermelho!!!

Alguem teria a ideia de como acessar um método via ajax e tornar o campo inválido?

[]s

Cara, é a mesma coisa. Como falei, você pode utilizar uma validação própria. O importante é utilizar o outputLabel e o <f:validator>. Se você vai fazer a validação a partir do bean, regex, ou alguma já pronta, não importa. Caso não passe pela validação, o label e o campo do input irão ficar em vermelho, como no exemplo.

Aqui um exemplo de como fazer um validator:
http://r4r.co.in/java/jsf/basic/tutorial/jsf2.0/validator/validator.shtml

Basta altera-lo para fazer a validação como você deseja.

Consegui fazer a validação segue o codigo
estava usando na taga <p:ajax> o attibuto listener="#{user.validaEmail}" o qual no meu bean tinha um metodo para fazer a validação por email.
So funcionou mesmo quando fiz um validator.

Mas para cada validação necessária para o aluno eu terei que fazer um validator???

   //código para entrada  de dados
<h:outputText value="? E-mail: " />
	<p:inputText  id="email" value="#{user.email}" validator="validaEmail"  size="30"  maxlength="45" required="true"
				requiredMessage="Digite um E-mail válido" validatorMessage="Email inválido." >
				<f:validateRegex pattern="[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,3})" />
				<p:ajax event="blur" update="validaEmail,email"  /> // estava usando nessa tag  listener="#{user.validaEmail}" 						
	</p:inputText>	
	<h:message for="email"/>
//Código do validator

@FacesValidator(value = "validaEmail")
public class AlunoValidaEmail implements Validator{

	@Override
	public void validate(FacesContext context, UIComponent component,
			Object value) throws ValidatorException {
		
		String email = (String) value;
		AlunoDAO alunoDAO = new AlunoDAOImpl();
		if(alunoDAO.verificaEmail(email)){
			FacesContext.getCurrentInstance().addMessage("validaEmail", new FacesMessage("Email já cadastrado"));
			throw new ValidatorException(new FacesMessage("Email já cadastrado"));
		}
	}
}

valeu pela ajuda ai ErickRAR

[]s

Opa, que nada cara, parabens por ter conseguido.

Validações simples de pattern, campo nulo etc. não precisa, só usar os de frameworks mesmo. Agora mais específicas como essa sua, validação de CPF, ou alguma regra de negócio, tem que ser fazendo o seu próprio Validator.