Como usar validação de campos em páginas JSF

8 respostas
N

bom dia, estou tentando validar campos no jsf com a tag <h:message /> mas não está dando certo, aparece um ponto no lugar da mensagem, como o pontinho de uma lista…
minha página está assim:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
		<title>Insert title here</title>
		<link rel="stylesheet" type="text/css" href="folhas/login_usuario.css" />
		<script type="text/javascript" src="javascript/login_usuario.js"></script>
	</head>
	<body>
		<div id="contcenter" class="contcenter">
			<f:view>
				<h:form prependId="false" id="form">
					<h:panelGrid styleClass="gridcenter">
						<h:inputText id="loja" value="#{login.loja}" styleClass="loja" />
						<h:inputText id="usuario" value="#{login.usuario}" styleClass="usuario" />
					</h:panelGrid>
					<h:commandButton id="imgbtgravar" image="imagens/btlogin.gif" action="#{login.entrarLogin}" styleClass="cmdgravar" />	
					<h:messages errorClass="erro" ></h:messages>
					<span id="menerro" class="erro" />
				</h:form>
			</f:view>
		</div>
	</body>
</html>

meu backingbean está assim:

package br.com.hrwmsf.model.backingBean;

import java.util.Map;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

import br.com.hrwmsf.model.DAO.LoginDAO;
import br.com.hrwmsf.model.DAO._Login;
import br.com.hrwmsf.model.connection.Pool;

@ManagedBean(name="login")
@SessionScoped

public class Login 
{
	private String loja = "";
	private String usuario = "";
	private String msgBanco = "";
	private byte statusBanco = 0;
	private _Login loginDAO;
	private Login login = null;
	private HttpSession sessao;
	FacesContext context ;
	FacesMessage message;


	public String getLoja() 
	{
		return loja;
	}
	public void setLoja(String loja) 
	{
		this.loja = loja;
	}
	public String getUsuario() 
	{
		return usuario;
	}
	public void setUsuario(String usuario) 
	{
		this.usuario = usuario;
	}
	public String getMsgBanco() {
		return msgBanco;
	}
	public void setMsgBanco(String msgBanco) {
		this.msgBanco = msgBanco;
	}
	public byte getStatusBanco() {
		return statusBanco;
	}
	public void setStatusBanco(byte statusBanco) {
		this.statusBanco = statusBanco;
	}
	public String entrarLogin()
	{
		loginDAO = new LoginDAO(new Pool());
		login = loginDAO.consultarDados(loja, usuario);

		context = FacesContext.getCurrentInstance();
		switch (login.statusBanco) 
		{
			case -1:
				this.loja = "";
				message = new FacesMessage(msgBanco);
				System.out.println(message);
				context.addMessage("loja", message);
				break;
			case -2:
				this.usuario = "";
				message = new FacesMessage(msgBanco);
				System.out.println(message);
				context.addMessage("usuario", message);
				break;
			default:
				sessao = (HttpSession) context.getExternalContext().getSession(true);
				sessao.setAttribute("loja",login.getLoja());
				sessao.setAttribute("usuario",login.getUsuario());
				
				DadosSessao  dados = new DadosSessao(sessao);
				dados.imprimeDados(sessao);
				
				return "menu";
		}
	
			return null;
	}
	
	@Override
	public String toString() {
		return "Login [loja=" + loja + ", usuario=" + usuario + ", msgBanco="
				+ msgBanco + ", statusBanco=" + statusBanco + ", loginDAO="
				+ loginDAO + ", login=" + login + "]";
	}
}

obrigado…

8 Respostas

D

Onde vc preenche o valor de msgBanco?? Parece que você está passando uma String vazia.

Flavio_machine

Quando vc usar mensagens globais vc nao pode colocar o id. Passa ele como null para o jsf saber que
você está usando o <h:messages /> que são mensagem globais, vc só deve passar o id quando saber o componente que está
querendo que onde mensagem será exibida.

context.addMessage(“loja”, message);

Até mais.

N

boa tarde dsjvb

eu estou carregando do banco através do método
login = loginDAO.consultarDados(loja, usuario);
obrigado pela resposta…

N

Obrigado Flavio…
entendi…
meu problema no momento, depois dos teus esclarecimentos é que só é mostrado um ponto tipo de começo de lista do html no lugar da ensagem, e o atributo styleClass
parece não funcionar…
vc sabe por que?
obrigado…

N

dsjbv você tinha razão…
estava errado…
segue a correção que fiz…
muito obrigado…

package br.com.hrwmsf.model.backingBean;

import java.util.Map;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

import br.com.hrwmsf.model.DAO.LoginDAO;
import br.com.hrwmsf.model.DAO._Login;
import br.com.hrwmsf.model.connection.Pool;

@ManagedBean(name="login")
@SessionScoped

public class Login 
{
	private String loja = "";
	private String usuario = "";
	private String msgBanco = "";
	private byte statusBanco = 0;
	private _Login loginDAO;
	private Login login = null;
	private HttpSession sessao;
	FacesContext context ;
	FacesMessage message;


	public String getLoja() 
	{
		return loja;
	}
	public void setLoja(String loja) 
	{
		this.loja = loja;
	}
	public String getUsuario() 
	{
		return usuario;
	}
	public void setUsuario(String usuario) 
	{
		this.usuario = usuario;
	}
	public String getMsgBanco() {
		return msgBanco;
	}
	public void setMsgBanco(String msgBanco) {
		this.msgBanco = msgBanco;
	}
	public byte getStatusBanco() {
		return statusBanco;
	}
	public void setStatusBanco(byte statusBanco) {
		this.statusBanco = statusBanco;
	}
	
	public String entrarLogin()
	{
		loginDAO = new LoginDAO(new Pool());
		login = loginDAO.consultarDados(loja, usuario);

		context = FacesContext.getCurrentInstance();
		switch (login.statusBanco) 
		{
			case -1:
				this.loja = "";
				message = new FacesMessage(login.msgBanco);
				context.addMessage(null, message);
				break;
			case -2:
				this.usuario = "";
				message = new FacesMessage(login.msgBanco);
				context.addMessage(null, message);
				break;
			default:
				sessao = (HttpSession) context.getExternalContext().getSession(true);
				sessao.setAttribute("loja",login.getLoja());
				sessao.setAttribute("usuario",login.getUsuario());
				
				DadosSessao  dados = new DadosSessao(sessao);
				dados.imprimeDados(sessao);
				
				return "menu";
		}
			return null;
	}
	
	@Override
	public String toString() {
		return "Login [loja=" + loja + ", usuario=" + usuario + ", msgBanco="
				+ msgBanco + ", statusBanco=" + statusBanco + ", loginDAO="
				+ loginDAO + ", login=" + login + "]";
	}
}
N

O problema do ponto da lista eu resolvi assim:
<h:messages layout=“table” errorClass=“erro1” />
só estou com um último problema…
não consigo aplicar stilo css para essa tag…
como posso fazer isso?
meu css está externo…
muito obrigado…

D

No arquivo css vc tem que ter o cmdgravar:

.cmdgravar {
   .... 
   ....
   ....
}

Verifica se está lá.

N

beleza…
deu certo, acho que o problema era que não estava atualizando a página ai achei que não estva funcionando
obrigado a todos…

Criado 29 de março de 2011
Ultima resposta 29 de mar. de 2011
Respostas 8
Participantes 3