Erro validação jsf

8 respostas
CristianPalmaSola10

Estou com um problema de validacao em um combo box do primafaces vou postar o codigo

<p:outputPanel id="panelHorario" >
                                    <p:selectOneMenu value="#{consultaLotacaoController.horario.horarioViagem}" style="width: 300px;"
                                                     disabled="#{consultaLotacaoController.idDiaAux == null}" converter="horaConverter">

                                        <c:selectItem itemLabel="Selecione o Horário..." itemValue="#{null}" rendered="#{consultaLotacaoController.idDiaAux != null}"/>
                                        <c:selectItems value="#{consultaLotacaoController.dia.listaHorarios}" var="h" itemLabel="#{h.horaFormatado}"
                                                       itemValue="#{h.horarioViagem}"/>
                                        
                                    </p:selectOneMenu>
                                </p:outputPanel>

meu controller

package com.estagio.controller;

import com.estagio.business.RotaBO;
import com.estagio.dto.DiaDTO;
import com.estagio.dto.DtoDiaAux;
import com.estagio.dto.DtoHorarioViagem;
import com.estagio.dto.RotaDTO;
import java.io.Serializable;
import java.sql.Time;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

/**
 * @author Cristian Urbainski
 * @since 16/06/2012
*/
@ManagedBean
@ViewScoped
public class ConsultaLotacaoController implements Serializable {
    
    private List<RotaDTO> listaRota;
    private List<DtoDiaAux> listaDiaDtoAux;
    
    private DiaDTO dia;
    private RotaDTO rota;
    
    private Integer idRotaAux;
    private Integer idDiaAux;
    
    private DtoHorarioViagem horario;
    
    private Integer numeroVagas;
    
    private Time time;

    public ConsultaLotacaoController()
    {
        horario = new DtoHorarioViagem(null, null);
    }
    
    public void limpar()
    {
        idRotaAux = null;
        idDiaAux = null;
        horario.setHorarioViagem(null);
    }
    
    public void buscarVagas()
    {
        try {
        
            Calendar data = Calendar.getInstance();
            data.set(Calendar.HOUR, horario.getHorarioViagem().getHours());
            data.set(Calendar.MINUTE, horario.getHorarioViagem().getMinutes());

            System.out.println(new SimpleDateFormat("dd/MM/yyyy HH:mm").format(data.getTime()));
            Integer quantidade = new RotaBO().buscarVagasLotacao(idDiaAux, data.getTime());
            
            numeroVagas = rota.getTipoVeiculo().getQtLuar() - quantidade;
        } catch (Exception e) {
            e.printStackTrace();
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro", e.getMessage()));
        }
        
    }
    
    public void searchDia()
    {
        System.out.println("chegou search dia");
        if(idDiaAux.equals(new Integer("1")))
        {
            dia = rota.getDomingo();
        } 
        else if(idDiaAux.equals(new Integer("2")))
        {
            dia = rota.getSegunda();
        }
        else if(idDiaAux.equals(new Integer("3")))
        {
            dia = rota.getTerca();
        }
        else if(idDiaAux.equals(new Integer("4")))
        {
            dia = rota.getQuarta();
        }
        else if(idDiaAux.equals(new Integer("5")))
        {
            dia = rota.getQuinta();
        }
        else if(idDiaAux.equals(new Integer("6")))
        {
            dia = rota.getSexta();
        }
        else if(idDiaAux.equals(new Integer("7")))
        {
            dia = rota.getSabado();
        }
        
        horario = new DtoHorarioViagem(null, null);
    }
    
    public void searchRota()
    {
        for (RotaDTO rotaDTO : listaRota) {
            if(rotaDTO.getIdRota().equals(idRotaAux))
            {
                rota = rotaDTO;
                    break;
            }
            
            idDiaAux = null;
            horario.setHorarioViagem(null);
        }
        
        listaDiaDtoAux = new ArrayList<DtoDiaAux>();
        
        if(rota.getDomingo().getTemRotaNesseDia())
        {
            listaDiaDtoAux.add(new DtoDiaAux(new Integer("1"), "Domingo", rota.getDomingo()));
        }
        
        if(rota.getSegunda().getTemRotaNesseDia())
        {
            listaDiaDtoAux.add(new DtoDiaAux(new Integer("2"), "Segunda-Feira", rota.getSegunda()));
        }
        
        if(rota.getTerca().getTemRotaNesseDia())
        {
            listaDiaDtoAux.add(new DtoDiaAux(new Integer("3"), "Terça-Feira", rota.getTerca()));
        }
        
        if(rota.getQuarta().getTemRotaNesseDia())
        {
            listaDiaDtoAux.add(new DtoDiaAux(new Integer("4"), "Quarta-Feira", rota.getDomingo()));
        }
        
        if(rota.getQuinta().getTemRotaNesseDia())
        {
            listaDiaDtoAux.add(new DtoDiaAux(new Integer("5"), "Quinta-Feira", rota.getDomingo()));
        }
        
        if(rota.getSexta().getTemRotaNesseDia())
        {
            listaDiaDtoAux.add(new DtoDiaAux(new Integer("6"), "Sexta-Feira", rota.getDomingo()));
        }
        
        if(rota.getSabado().getTemRotaNesseDia())
        {
            listaDiaDtoAux.add(new DtoDiaAux(new Integer("7"), "Sabado", rota.getDomingo()));
        }
    }

    public Integer getIdRotaAux() {
        return idRotaAux;
    }

    public void setIdRotaAux(Integer idRotaAux) {
        this.idRotaAux = idRotaAux;
    }
    
    public List<RotaDTO> getListaRota() {
        
        try {
            listaRota = new RotaBO().buscarTodasRotas();
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        return listaRota;
    }

    public void setListaRota(List<RotaDTO> listaRota) {
        this.listaRota = listaRota;
    }

    public RotaDTO getRota() {
        return rota;
    }

    public void setRota(RotaDTO rota) {
        this.rota = rota;
    }

    public DiaDTO getDia() {
        return dia;
    }

    public void setDia(DiaDTO dia) {
        this.dia = dia;
    }

    public DtoHorarioViagem getHorario() {
        return horario;
    }

    public void setHorario(DtoHorarioViagem horario) {
        this.horario = horario;
    }

    public Integer getIdDiaAux() {
        return idDiaAux;
    }

    public void setIdDiaAux(Integer idDiaAux) {
        this.idDiaAux = idDiaAux;
    }

    public List<DtoDiaAux> getListaDiaDtoAux() {
        return listaDiaDtoAux;
    }

    public void setListaDiaDtoAux(List<DtoDiaAux> listaDiaDtoAux) {
        this.listaDiaDtoAux = listaDiaDtoAux;
    }
 
    public Integer getNumeroVagas() {
        return numeroVagas;
    }

    public void setNumeroVagas(Integer numeroVagas) {
        this.numeroVagas = numeroVagas;
    }
    
    public Time getTime() {
        return time;
    }

    public void setTime(Time time) {
        this.time = time;
    }
}

meu converter

package com.estagio.converter;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;

/**
 * @author Cristian Urbainski
 * @since 24/06/2012
 */
@FacesConverter(value="horaConverter")
public class HoraConverter implements Converter{

    @Override
    public Object getAsObject(FacesContext fc, UIComponent uic, String string) {
        String hor[] = string.split(":");
        
        Calendar c = Calendar.getInstance();
        c.set(Calendar.HOUR, Integer.parseInt(hor[0]));
        c.set(Calendar.MINUTE, Integer.parseInt(hor[1]));
        
        System.out.println(new SimpleDateFormat("HH:mm").format(c.getTime()));
        
        return c.getTime();
    }

    @Override
    public String getAsString(FacesContext fc, UIComponent uic, Object o) {
        return new SimpleDateFormat("HH:mm").format((Date) o);
    }
    
}

[/code

quando clico no botao Verificar Lotação ele me da o seguinte erro de validação

[code]
form:j_idt85: Erro de validação: o valor não é válido

pesquisei na net e achei um cara que fala que o metodo equals do objeto em questao deveria ser modificado em fiz isso mas continua sem funcionar aqui vai a classe

package com.estagio.dto;

import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author Cristian Urbainski
 * @since 17/05/2012
 */
public class DtoHorarioViagem implements Serializable{
    
    private String label;
    private Date horarioViagem;

    public DtoHorarioViagem(String label, Date horario) {
        this.label = label;
        this.horarioViagem = horario;
    }

    public Date getHorarioViagem() {
        return horarioViagem;
    }

    public void setHorarioViagem(Date horario) {
        this.horarioViagem = horario;
    }

    public String getLabel() {
        return label;
    }

    public void setLabel(String label) {
        this.label = label;
    }
    
    public String getHoraFormatado()
    {
        return new SimpleDateFormat("HH:mm").format(this.horarioViagem);
    }

    @Override
    public boolean equals(Object obj) {
        DtoHorarioViagem dtoAux = (DtoHorarioViagem) obj;
        
        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
        
        String data1 = sdf.format(horarioViagem);
        String data2 = sdf.format(dtoAux.getHorarioViagem());
        
        return data1.equals(data2);
    }
    
}

se alguem poder me ajudar fico muito agradecido

ate mais obrigado desde ja pela ajuda.

8 Respostas

giovanni_dalfre

Então esse negocio de converter é meio chato, mas pelo que eu vi o problema é que no metodo getAsString você ta mandando um “SimpleDateFormat”.

Tenta fazer isso:

@Override  
    public String getAsString(FacesContext fc, UIComponent uic, Object o) {  
     return new SimpleDateFormat("HH:mm").format((Date) o).toString();  
    }

Talvez seja isso… pq pra mim parece que o resto ta tudo certo :D.

W

Amigo para que o problema é esse mesme que o giovanni_dalfre disse.
mas uma dica só para melhorar o desenpenho do seu projeto.

//  Toda vez que chegar no get de sua lista, vai consultar todas mesmo ela já estando preenchida
public List<RotaDTO> getListaRota() {  
          
        try {  
            listaRota = new RotaBO().buscarTodasRotas();  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
          
        return listaRota;  
    }

Legal seria validar se ela está nula ou não dessa forma

//  Dessa forma só irá consultar se a lista estiver nula.
public List<RotaDTO> getListaRota() {  
          
        try {  
            if(listaRota == null){
            listaRota = new RotaBO().buscarTodasRotas();  
            }
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
          
        return listaRota;  
    }
CristianPalmaSola10

Value ai pela ajuda giovanni_dalfre e wesllhey, estarei mudando isso hoje pelo meio dia no meu horario de almoço e pela tarde ja estarei contanto para voces o que aconteceu

tomare que funcione isso agora

value pela ajuda

ate mais

CristianPalmaSola10

Entao galera tentei fazer o negocio e naum foi, mas percebi aonde estava o erro, mas naum consegui terminar de arruma-lo

entaum vou deixar esse post aberto ainda e a noite na faculdade eu termino de conserto vejo se funcionou e conto aonde estava o erro

posto o codigo como ficou pra vcs

ate mais

ErickRAR

Tem que reescrever o hashCode também.

CristianPalmaSola10

Pois é fiz isso tambem, mas desculpe minha ignorancia, mas pra que server aquilo ao certo.

Nunca fui atras daquilo porque nunca precisei usar antes, agora a primeira fez que aquilo me serve para alguma coisa.

poderiam me dizer para que serve ?

ErickRAR

HashCode é basicamente um código para identificar o objeto. Se os objetos forem iguais, o código também será igual, mas se os hashcodes forem iguais, não necessariamente os objetos são iguais. Sempre que for reescrever o equals, é bom reescrever também o hashCode.

CristianPalmaSola10

Tava lendo um artigo da caelum sobre o assunto, ai deu uma clarriada para implementar hascode da classe

Criado 1 de agosto de 2012
Ultima resposta 2 de ago. de 2012
Respostas 8
Participantes 4