Listar datas do periodo - problemas ao salvar registro. - JSF

Bom dia.

Estou desenvolvendo um sistema utilizando JSF / Icefaces. Em uma determinada página, exibo uma lista das datas pertencentes a um periodo para o usuário selecionar. O problema é que ao salvar, o sistema apresenta erros.

...

    private void populateDataPeriodoCardapio(DataPeriodoCardapio per, ResultSet rs) throws SQLException, ClassNotFoundException {
        per.setPeriodoCard(getById(rs.getInt("ID_PERIODO_CARD")));
        per.setData(rs.getDate("DATA"));
    }

    public List<DataPeriodoCardapio> getDataPeriodoCardapio(int idPerCard) throws ClassNotFoundException, SQLException, Exception {
        List<DataPeriodoCardapio> toReturn = new LinkedList<DataPeriodoCardapio>();
        PreparedStatement ps = (PreparedStatement) getPreparedStatement("SELECT * FROM VW_DATA_PERIODO_CARD WHERE ID_PERIODO_CARD = ?");
        ps.setInt(1, idPerCard);
        ResultSet rs = ps.executeQuery();
        while (rs.next()) {
            DataPeriodoCardapio rece = new DataPeriodoCardapio();
            populateDataPeriodoCardapio(rece, rs);
            toReturn.add(rece);
        }
        return toReturn;
    }
...
public class RelCardapioEscolaFace {

    private RelCardapioEscolaDAO rceDAO = new RelCardapioEscolaDAO();
    private EscolaDAO escDAO = new EscolaDAO();
    private TipoEnsinoDAO tensDAO = new TipoEnsinoDAO();
    private CardapioDAO cardDAO = new CardapioDAO();
    private PeriodoEscolaDAO pescDAO = new PeriodoEscolaDAO();
    private PeriodoCardapioDAO perCardDAO = new PeriodoCardapioDAO();
    private RelCardapioEscola selectedRelCardapioEscola;
    private List<RelCardapioEscola> relCardapioEscola;
    private PeriodoCardapio periodoCard;

    public RelCardapioEscolaFace() {
        System.out.println("RelCardapioEscola Face");
    }

    public String startAddRelCardapioEscola () {
        selectedRelCardapioEscola = new RelCardapioEscola();
        return "gotoAddNewRelCardapioEscola";
    }

    public String finishAddRelCardapioEscola () throws ClassNotFoundException, SQLException {
        rceDAO.add(selectedRelCardapioEscola);
        // Limpa o cache
        relCardapioEscola = null;
        return "gotoAddNewRelCardapioEscola";
    }

    public List<RelCardapioEscola> getRelCardapioEscolaByPeriodoCard() throws ClassNotFoundException, SQLException {
        relCardapioEscola = null;
        if (relCardapioEscola == null){
            relCardapioEscola = rceDAO.getRelCardapioEscolaByPecard(periodoCard.getIdPeriodoCard());
        }
        return relCardapioEscola;
    }

    public String removeRelCardapioEscola() throws ClassNotFoundException, SQLException {
        rceDAO.delete(selectedRelCardapioEscola);
        // Limpa o cache
        relCardapioEscola = null;
        return "gotoAddNewRelCardapioEscola";
    }

    public RelCardapioEscola getSelectedRelCardapioEscola() {
        return selectedRelCardapioEscola;
    }

    public void setSelectedRelCardapioEscola(RelCardapioEscola selectedRelCardapioEscola) {
        this.selectedRelCardapioEscola = selectedRelCardapioEscola;
    }

    public List<SelectItem> getEscola() throws ClassNotFoundException, SQLException {
        List<SelectItem> toReturn = new LinkedList<SelectItem>();
        for (Escola ali: escDAO.getAllEscola()) {
            toReturn.add(new SelectItem(ali,ali.getNomeEscola()));
        }
        return toReturn;
    }

    public List<SelectItem> getTipoEnsino() throws ClassNotFoundException, SQLException {
        List<SelectItem> toReturn = new LinkedList<SelectItem>();
        for (TipoEnsino tens: tensDAO.getAllTipoEnsino()) {
            toReturn.add(new SelectItem(tens,tens.getTipoEnsino()));
        }
        return toReturn;
    }

    public List<SelectItem> getCardapio() throws ClassNotFoundException, SQLException {
        List<SelectItem> toReturn = new LinkedList<SelectItem>();
        for (Cardapio card: cardDAO.getAllCardapio()) {
            toReturn.add(new SelectItem(card,card.getCardapio()));
        }
        return toReturn;
    }

    public List<SelectItem> getPeriodoEscola() throws ClassNotFoundException, SQLException {
        List<SelectItem> toReturn = new LinkedList<SelectItem>();
        for (PeriodoEscola pesc: pescDAO.getAllPeriodoEscola()) {
            toReturn.add(new SelectItem(pesc,pesc.getPeriodo()));
        }
        return toReturn;
    }

    public List<SelectItem> getDataPeriodoCardapio() throws ClassNotFoundException, SQLException, Exception {
        List<SelectItem> toReturn = new LinkedList<SelectItem>();
        for (DataPeriodoCardapio dataPerCard: perCardDAO.getDataPeriodoCardapio(periodoCard.getIdPeriodoCard())) {
            toReturn.add(new SelectItem(dataPerCard, dataPerCard.getData().toString()));
        }
        return toReturn;
    }

    public PeriodoCardapio getPeriodoCard() {
        return periodoCard;
    }

    public void setPeriodoCard(PeriodoCardapio periodoCard) {
        this.periodoCard = periodoCard;
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<!--
    Document   : SIGAEWeb1
    Created on : 24/02/2010, 11:42:41
    Author     : jose
-->
<jsp:root xmlns:ui="http://java.sun.com/jsf/facelets" version="2.1" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:ice="http://www.icesoft.com/icefaces/component">
<jsp:directive.page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"/>
<f:view>
<html>
<head>
    <title>SIGAE - cardapio escola</title>
</head>

<body  bgcolor="#E6FEFF">
    <ui:include src="menu.jspx"></ui:include>
        <br/><br/><br/>
        <div style="font-family: Arial, Helvetica, sans-serif; font-size: 14pt;" align="center">RELACIONAMENTO DE CARDAPIOS COM ESCOLAS</div><br/><br/>
    <ice:form>
        <ice:messages/>
        <div style="font-family: Arial, Helvetica, sans-serif; font-size: 11pt;" align="center">
            <ice:commandButton action="gotoListPeriodoCardapio" value="Voltar"/>
            <ice:commandButton action="#{RelCardapioEscolaFace.finishAddRelCardapioEscola}" value="Adicionar"/><br/>

            <ice:panelGrid columns="2">
                <ice:outputLabel value="escola"/>
                <ice:selectOneMenu value="#{RelCardapioEscolaFace.selectedRelCardapioEscola.escola}">
                    <f:selectItems value="#{RelCardapioEscolaFace.escola}"/>
                    <f:converter converterId="EscolasConversor"/>
                </ice:selectOneMenu>
                <ice:outputLabel value="tipo ensino"/>
                <ice:selectOneMenu value="#{RelCardapioEscolaFace.selectedRelCardapioEscola.tipoEnsino}">
                    <f:selectItems value="#{RelCardapioEscolaFace.tipoEnsino}"/>
                    <f:converter converterId="TipoEnsinoConversor"/>
                </ice:selectOneMenu>
                <ice:outputLabel value="periodo escola"/>
                <ice:selectOneMenu value="#{RelCardapioEscolaFace.selectedRelCardapioEscola.periodoEscola}">
                    <f:selectItems value="#{RelCardapioEscolaFace.periodoEscola}"/>
                    <f:converter converterId="PeriodoEscolaConversor"/>
                </ice:selectOneMenu>
                <ice:outputLabel value="data"/>
                <ice:selectOneMenu value="#{RelCardapioEscolaFace.selectedRelCardapioEscola.data}">
                    <f:selectItems value="#{RelCardapioEscolaFace.dataPeriodoCardapio}"/>
                    <f:convertDateTime/>
                </ice:selectOneMenu>
            </ice:panelGrid><br/><br/>

            <ice:dataTable style="font-family: Arial, Helvetica, sans-serif; font-size: 11pt;" bgcolor="white" border="1" var="item" value="#{RelCardapioEscolaFace.relCardapioEscolaByPeriodoCard}">
                <ice:column>
                    <f:facet name="header">
                        <ice:outputText value="escola"/>
                    </f:facet>
                        <ice:outputText value="#{item.escola.escola}" style="font-family: Arial, Helvetica, sans-serif; font-size: 11pt"/>
                </ice:column>
                <ice:column>
                    <f:facet name="header">
                        <ice:outputText value="tipo ensino"/>
                    </f:facet>
                        <ice:outputText value="#{item.tipoEnsino.tipoEnsino}"/>
                </ice:column>
                <ice:column>
                    <f:facet name="header">
                        <ice:outputText value="data"/>
                    </f:facet>
                        <ice:outputText value="#{item.data}"/>
                </ice:column>
                <ice:column>
                    <f:facet name="header">
                        <ice:outputText value="cardapio"/>
                    </f:facet>
                        <ice:outputText value="#{item.cardapio.cardapio}"/>
                </ice:column>

                <ice:column>
                    <f:facet name="header">
                        <ice:outputText value="ações"/>
                    </f:facet>
                    <ice:commandLink value="excluir" action="#{RelCardapioEscolaFace.removeRelCardapioEscola}">
                        <f:setPropertyActionListener target="#{RelCardapioEscolaFace.selectedRelCardapioEscola}" value="#{item}"/>
                    </ice:commandLink>
                </ice:column>
            </ice:dataTable>
        </div>
    </ice:form>
</body>
</html>
</f:view>
</jsp:root>

Quando utilizo


                <ice:outputLabel value="data"/>
                <ice:selectOneMenu value="#{RelCardapioEscolaFace.selectedRelCardapioEscola.data}">
                    <f:selectItems value="#{RelCardapioEscolaFace.dataPeriodoCardapio}"/>
                    <f:convertDateTime/>
                </ice:selectOneMenu>

Ocorre a exception abaixo ao acessar a pagina:

java.lang.IllegalArgumentException: Cannot format given Object as a Date
	java.text.DateFormat.format(DateFormat.java:281)
	java.text.Format.format(Format.java:140)
	javax.faces.convert.DateTimeConverter.getAsString(DateTimeConverter.java:456)
	com.icesoft.faces.renderkit.dom_html_basic.DomBasicRenderer.converterGetAsString(DomBasicRenderer.java:232)
	com.icesoft.faces.renderkit.dom_html_basic.DomBasicRenderer.formatComponentValue(DomBasicRenderer.java:198)
	com.icesoft.faces.renderkit.dom_html_basic.MenuRenderer.renderOption(MenuRenderer.java:312)
	com.icesoft.faces.renderkit.dom_html_basic.MenuRenderer.renderOptions(MenuRenderer.java:493)
	com.icesoft.faces.renderkit.dom_html_basic.MenuRenderer.renderSelect(MenuRenderer.java:419)
	com.icesoft.faces.renderkit.dom_html_basic.MenuRenderer.encodeEnd(MenuRenderer.java:119)
	com.icesoft.faces.component.ext.renderkit.MenuRenderer.encodeEnd(MenuRenderer.java:51)
	javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:861)
	com.icesoft.faces.renderkit.dom_html_basic.DomBasicRenderer.encodeParentAndChildren(DomBasicRenderer.java:370)
	com.icesoft.faces.renderkit.dom_html_basic.GridRenderer.encodeChildren(GridRenderer.java:208)
	javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837)
	com.icesoft.faces.application.D2DViewHandler.renderResponse(D2DViewHandler.java:492)
	com.icesoft.faces.application.D2DViewHandler.renderResponse(D2DViewHandler.java:497)
	com.icesoft.faces.application.D2DViewHandler.renderResponse(D2DViewHandler.java:497)
	com.icesoft.faces.application.D2DViewHandler.renderResponse(D2DViewHandler.java:497)
	com.icesoft.faces.application.D2DViewHandler.renderResponse(D2DViewHandler.java:497)
	com.icesoft.faces.application.D2DViewHandler.renderResponse(D2DViewHandler.java:497)
	com.icesoft.faces.facelets.D2DFaceletViewHandler.renderResponse(D2DFaceletViewHandler.java:282)
	com.icesoft.faces.application.D2DViewHandler.renderView(D2DViewHandler.java:159)
	com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110)
	com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
	com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
	com.icesoft.faces.webapp.http.core.JsfLifecycleExecutor.apply(JsfLifecycleExecutor.java:19)
	com.icesoft.faces.webapp.http.core.ReceiveSendUpdates.renderCycle(ReceiveSendUpdates.java:132)
	com.icesoft.faces.webapp.http.core.ReceiveSendUpdates.service(ReceiveSendUpdates.java:74)
	com.icesoft.faces.webapp.http.core.RequestVerifier.service(RequestVerifier.java:31)
	com.icesoft.faces.webapp.http.common.standard.PathDispatcherServer.service(PathDispatcherServer.java:24)
	com.icesoft.faces.webapp.http.servlet.BasicAdaptingServlet.service(BasicAdaptingServlet.java:16)
	com.icesoft.faces.webapp.http.servlet.PathDispatcher.service(PathDispatcher.java:23)
	com.icesoft.faces.webapp.http.servlet.SessionDispatcher.service(SessionDispatcher.java:53)
	com.icesoft.faces.webapp.http.servlet.SessionVerifier.service(SessionVerifier.java:26)
	com.icesoft.faces.webapp.http.servlet.PathDispatcher.service(PathDispatcher.java:23)
	com.icesoft.faces.webapp.http.servlet.MainServlet.service(MainServlet.java:131)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	com.icesoft.faces.webapp.xmlhttp.BlockingServlet.service(BlockingServlet.java:56)

Quando utilizo sem o f:converter

                <ice:outputLabel value="data"/>
                <ice:selectOneMenu value="#{RelCardapioEscolaFace.selectedRelCardapioEscola.data}">
                    <f:selectItems value="#{RelCardapioEscolaFace.dataPeriodoCardapio}"/>
                </ice:selectOneMenu>

A pagina carrega, mas ao salvar, é apresentado:

Erro de validação: informação inválida.

Alguem tem alguma dica para passar?

creio que vc precise de um converter pra ‘dataPeriodoCardapio’, digo um custom converter, pois o que vem ‘out of the box’ nao trabalha com o tipo de dado que vc ta passando ‘DataPeriodoCardapio’

Balrog.

Criei o conversor customizado, no entanto, este conversor funciona quando o tipo de dado é string. Tem alguma idéia de como posso fazer ele funcionar para Date?

package sigaeweb.Conversores;

import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import sigaeweb.DAO.DataPeriodoCardapioDAO;
import sigaeweb.db.DataPeriodoCardapio;

/**
 *
 * @author Viviane
 */
public class DataPeriodoCardapioConversor implements Converter {

    private static final long serialVersionUID = 1L;
    private DataPeriodoCardapioDAO dtPerCardDAO = new DataPeriodoCardapioDAO();

    public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
        Integer idTesc = Integer.parseInt(arg2);
        try {
            return dtPerCardDAO.getById(idTesc);
        } catch (SQLException ex) {
            Logger.getLogger(DataPeriodoCardapioConversor.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(DataPeriodoCardapioConversor.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }

    public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
        DataPeriodoCardapio dtPerCard = (DataPeriodoCardapio)arg2;
        return String.valueOf(dtPerCard.getIdData());
    }

}

Att: