Olá pessoal.
Tenho uma aplicação de cadastro em JSF com um campo de “e-mail” e outro de “redigite seu e-mail”.
Como checo os 2 se são iguais antes de enviar com o commandButton?
Ou isso é feito dentro do método?
Obrigado.
Olá pessoal.
Tenho uma aplicação de cadastro em JSF com um campo de “e-mail” e outro de “redigite seu e-mail”.
Como checo os 2 se são iguais antes de enviar com o commandButton?
Ou isso é feito dentro do método?
Obrigado.
Procure por custom validator, ou ainda, use javascript, mais especificamente eu gosto de jquery.
Tente este link para ver se te ajudar:
Ou, você pode fazer isso via JavaScript!!! no atributo onclick do commandButton!
[quote=thiago.correa]Ou, você pode fazer isso via JavaScript!!! no atributo onclick do commandButton!
;-)[/quote]
Acho que também dá para fazer via o atributo “onsubmit” do “form”. Eu recomendaria checar as entradas no lado servidor também…
Inté.
Pessoal, nada de javascript nesse caso, certo?
Tem que ser em JSF mesmo, javascript não vai evitar que usuário burle isso.
Obrigado.
[quote]
Pessoal, nada de javascript nesse caso, certo?
Tem que ser em JSF mesmo, javascript não vai evitar que usuário burle isso.
Obrigado.[/quote]
Por isso que deve ser verificado no lado do servidor também. Mas um javascript já ajuda que o usuário não perca tempo enviando dados incorretos.
Sim eu sei, só que estou procurando uma maneira de fazer isso em JSF.
Vc quer fazer isso sem dar submit no formulario? Bom eu costumo fazer as validações pela minha classe java, ou seja, qdo o usuario invoca o botao atraves do ManagedBean mapeado no meu arquivo faces eu tenho acesso ao metods de gravar(por exemplo) e antes de gravar eu mando fazer as minhas validações necessárias retornando ou nao se os dados poderao ser gravados, mas isso nao vai impedir de dar o submit na tela. De uma olhada aqui especificamente na classe RelatorioDepartamento e na pagina relatoriodepartamento.jsp. Boa sorte!
E ae ebarros td bem?
[quote]O JavaFree tá off.
[/quote]
E não, é dando o submit mesmo.
Eu a´te que tentaria fazer assim como você disse (validar com uma classe JAVA antes de inserir no banco), só que não consigo fazer as duas coisas na classe.
[quote=cebolah]E ae ebarros td bem?
[quote]O JavaFree tá off.
[/quote]
E não, é dando o submit mesmo.
Eu a´te que tentaria fazer assim como você disse (validar com uma classe JAVA antes de inserir no banco), só que não consigo fazer as duas coisas na classe.[/quote]
Vou te passar um exemplo simples passo a passo:
<!--no seu arquivo faces-->
<managed-bean>
<managed-bean-name>pc_NomePageCode</managed-bean-name>
<!--pathDaSuaClasse ex:-->
<managed-bean-class>br.prteste.teste</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<!-- Na sua página jsp-->
<h:outputText id="labelTexto" value="Texto:" />
<h:inputText id="campoTexto" value="#{pc_NomePageCode.objetoDasuaClasse.beanQualquerDaClasse}"/>
<h:commandButton id="botaoGravar" value="Gravar" action="#{pc_NomePageCode.metodoDeGravarDaClasseMapeadaAcima}"/>
//na sua classe java
private SuaClasse objetoDaSuaClasse;
//+metodos encapsuladores
public void metodoGravar(){
if(objetoDaSuaClasse.beanQualquerDaClasse() == null || objetoDaSuaClasse.beanQualquerDaClasse().equals("") ){
//manda aqui sua mensagem
return;
}
}
Desculpe, acho q ñ estou pronto ainda pra fazer isso em JSF. Não estou conseguindo fazer isso mesmo.
Não estou conseguindo fazer mais nada lá. Vou ver se manipulo isso em Ajax mesmo até eu estudar um pouco mais sobre JavaServer Faces.
Script bem simples para validar formulário:
<script type="text/javascript" charset="ISO-8859-1">
function validarFormulario(){
var corErro = "#FF6600";
if(document.getElementById("mail").value.toString().localeCompare(document.getElementById("mailConfirm").value.toString()) != 0){
document.getElementById("mailConfirm").focus();
document.getElementById("mailConfirm").style.backgroundColor = corErro;
alert("Confirmação de E¹/2 não confere!");
return false;
}else{
return true;
}
</script>
Aqui está o html:
<form method="post" action="" name="dadosUsuario" accept-charset="ISO-8859-1" onsubmit="return validarFormulario();">
<input type="text" value="" id="mail" name="mail" size="50">
<input type="text" value="" id="mailConfirm" name="mailConfirm" size="50">
</form>
Lembrando que nesse caso ele sabe quem são os campos pelo “id” do mesmo é algo realmente super tranquilo. Nesses casos é mais recomendado vc fazer a validação por javascript mesmo pois, se toma recursos computacionais demais submetendo um form só por causa disso.
Qualquer coisa dá um grito…
Um grande abraço!!!
Desculpe a demora por responder. É q formatei o pc e os favoritos sumiram e até eu achar esse post de novo…
Bom, esse método com javascript só será seguro se for em ajax, de uma forma que se desabilitando o javascript do navegador não possa submeter o formulário.
Mas tem um porém: mesmo assim, o visitante pode muito bem salvar a página no pc dele e tentar burlar o formulário pra enviar mesmo assim, e se ele estiver com o javascript desabilitado, as validações (lado servidor) também não terão efeito ou terão? Acho q não né.
É por isso que não quero javascript, só pra embelezar mesmo, mas não é recomendável substituir uma validação em JSP ou JSF ou servlets, etc, por javascript!
E é por isso que eu tento em JSF, que é o que estou estudando no momento, só que não consigo a validação, e agora não estou entendendo nem como cadastrar corretamente os dados no banco com JSF, eu seto os getters e setters corretamente mas sempre dá nullpointerexception Oo.
Atenciosamente.
Acho que o Cebola tá querendo saber como fazer via validators, né?
Eu também estou com essa dificuldade. Consigo recuperar o valor de um campo, mas de dois eu não sei como.
O exemplo abaixo tem o propósito de validar do lado do servidor se uma data é maior do que a outra:
View:
<rich:separator/><rich:spacer/>
<h:outputText value="Início Previsto do Benchmarking (dd/mm/aaaa):"/>
<rich:calendar id="benDtInicioPrevista" value="#{benchmarking.benchmarking.benDtInicioPrevista}" locale="pt_BR" datePattern="dd/MM/yyyy" />
<h:outputText value="Conclusão Prevista do Benchmarking (dd/mm/aaaa):"/>
<rich:calendar id="benDtConclusaoPrevista" value="#{benchmarking.benchmarking.benDtConclusaoPrevista}" locale="pt_BR" datePattern="dd/MM/yyyy" validator="#{benchmarking.validateDataConclusaoBenchmarking}" />
<rich:separator/><rich:spacer/>
Validator no Managed Bean:
public void validateDataConclusaoBenchmarking(FacesContext context, UIComponent component,
Object input) throws ValidatorException {
Date dtConclusaoPlanejamento = (Date) input; // Campo que será validado
Date dtInicioPrevista = /* AQUI PRECISO RECUPERAR O VALOR DO CAMPO com id=benDtInicioPrevista */;
System.out.println("Inicio planejamento: " + dtInicioPrevista);
System.out.println("Conclusão planejamento: " + dtConclusaoPlanejamento);
if (dtInicioPrevista != null && dtConclusaoPlanejamento.before(dtInicioPrevista)) {
throw new ValidatorException(
new FacesMessage(FacesMessage.SEVERITY_ERROR, "A data de conclusão do planejamento deve ser posterior a data de início", null));
}
}
Pow pessoal, desculpe a demora, é que acabei perdendo o post e só encontrei esta mensagem agora.
sorry!!!
Bom, desculpe a todos por não esclarecer melhor a dúvida:
Pretendo checar 2 inputs (pode ser de e-mail mesmo) antes de inserir um cadastro, por exemplo, pode ser checando no servidor mesmo, só que gostaria que voltasse pra mesma página a mensagem de erro, isto é, como o JSF faz, sem apagar os dados já preenchidos.
Espero ter esclarecido melhor.
Fala brother!
O JSF não permite validar mais de um campo concomitantemente (até onde eu sei…!).
Mas como nessa vida só a morte não tem jeito, há uma solução (POG) para contornar essa restrição do JSF.
Dá uma lida nesse tutorial que está bem fácil de compreender: http://balusc.blogspot.com/2007/12/validator-for-multiple-fields.html
Espero que ajude!
cara pra valida esses campos nem precisa enviar uma requisição pro servidor, utiliza java script que a resposta é bem mais rapida e ele só vai da um submit na pagina( só vai carregar a pagina se a validação for correta (validação = chegar))
faz assim na sua jsp
[code]
[/code]e dentro do <f:view> <h:form> no buttao de submeter a pagina
coloca assim:
<h:commandButton value="Salvar" styleClass="BotGeral" actionListener="#{altProjetoMB.salvar}" onclick="return valida(this.form)"/>
agora se vc quiser validar um email mesmo é só usar essa função JS
function checkMail(mail){
var er = new RegExp(/^[A-Za-z0-9_\-\.]+@[A-Za-z0-9_\-\.]{2,}\.[A-Za-z0-9]{2,}(\.[A-Za-z0-9])?/);
if(typeof(mail) == "string"){
if(er.test(mail)){ return true; }
}else if(typeof(mail) == "object"){
if(er.test(mail.value)){
return true;
}
}else{
return false;
}
}