Problemas com JSF: Action não funciona

1 resposta
david.laks

Olá pessoal,
como vão todos?

Estou com problemas para criar uma tela de login no jsf que pega e cria um alert em jsp caso ou o campo login ou senha estejam vazios. Acontece que, após realizar essa verificação, a action não funciona. Vejam o código:

no login.jsp

<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>

<f:loadBundle basename="resourceBundle" var="msgs" />

<h:form id="loginForm">
	<h:outputText value="#{msgs.loginTitle}" />
	<f:verbatim><br><br></f:verbatim>
		
	<h:panelGrid columns="2">
		<h:outputText value="#{msgs.login}:" />
		<h:inputText value="#{login.usuario}" id="login" required="true" />
		<h:outputText value="#{msgs.senha}:" />
		<h:inputSecret value="#{login.senha}" id="senha" required="true" redisplay="true" />
	</h:panelGrid>
	
	<h:inputHidden id="hidenSenha" value="#{msgs['error.login.senha']}" />
	<h:inputHidden id="hidenLogin" value="#{msgs['error.login.user']}" />
	<h:inputHidden id="hidenLoginSenha" value="#{msgs['error.login.loginesenha']}" />
	
	<f:verbatim><br></f:verbatim>
	<h:commandButton action="teste_login" value="#{msgs.ok}" onclick="checkRequired(this.form)" />
</h:form>

<script type="text/javascript"><!--
	function checkRequired(form) {
		var login = form["body:loginForm:login"].value;
		var senha = form["body:loginForm:senha"].value;
		
		var hidenLogin = form["body:loginForm:hidenLogin"].value;
		var hidenSenha = form["body:loginForm:hidenSenha"].value;
		var hidenLoginSenha = form["body:loginForm:hidenLoginSenha"].value;
		
		login = trimAll(login);
		senha = trimAll(senha);
		
		if (login == '' && senha == '') {
			alert(hidenLoginSenha);
			return ;
		}
		
		if (login == '') {
			alert(hidenLogin);
			return ;
		}
		
		if (senha == '') {
			alert(hidenSenha);
			return ;
		}
		
		form.submit();
	}
	
	function trimAll(sInString)
	{
		sInString = sInString.replace( /^\s+/g, "" );
		return sInString.replace( /\s+$/g, "" );
	}
//--></script>

e no faces-config.xml

<navigation-rule>
		<from-view-id>*</from-view-id>
		<navigation-case>
			<from-outcome>teste_login</from-outcome>
			<to-view-id>/pages/logado.jsp</to-view-id>
			<redirect />
		</navigation-case>
	</navigation-rule>

e no meu resource bundle:

login=Login
senha=Senha
error.login.loginesenha=Favor preencher os campos de Login e Senha
error.login.senha=Favor preencher o campo Senha
error.login.user=Favor preencher o campo Login
loginTitle=Login

Acredito que fiz tudo correto, o que pode estar errado?

Abraços,
David

1 Resposta

urubatan
bahh, trabalho demais pra pouca coisa :D tenta assim: JSP
&lt;%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%&gt;
 &lt;%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%&gt;
 
 &lt;f:loadBundle basename="resourceBundle" var="msgs" /&gt;
 &lt;h:messages/&gt;
 &lt;h:form id="loginForm"&gt;
 	&lt;h:outputText value="#{msgs.loginTitle}" /&gt;
 	&lt;f:verbatim&gt;<br><br>&lt;/f:verbatim&gt;
 		
 	&lt;h:panelGrid columns="2"&gt;
 		&lt;h:outputText value="#{msgs.login}:" /&gt;
 		&lt;h:inputText value="#{login.usuario}" id="login" required="true" /&gt;
 		&lt;h:outputText value="#{msgs.senha}:" /&gt;
 		&lt;h:inputSecret value="#{login.senha}" id="senha" required="true" redisplay="true" /&gt;
 	&lt;/h:panelGrid&gt;
 	
 	&lt;f:verbatim&gt;<br>&lt;/f:verbatim&gt;
 	&lt;h:commandButton action="teste_login" value="#{msgs.ok}" /&gt;
 &lt;/h:form&gt;
no arquivo properties:
javax.faces.component.UIInput.REQUIRED        = Erro de validação
javax.faces.component.UIInput.REQUIRED_detail = "{0}": Um valor é requerido.
no faces-config.xml
&lt;application&gt;
&lt;message-bundle&gt;nomedoarquivosemo.properties&lt;/message-bundle&gt;
&lt;/application&gt;

prontinho :D

ou então usa h:message para cada campo em vez do h:messages, ou cria outro componente de mensagens que vai mostrar um popup em vez de imprimir as mensagens na tela ...

Criado 17 de maio de 2006
Ultima resposta 17 de mai. de 2006
Respostas 1
Participantes 2