Problemas com data em SelectOneMenu

Bom dia galera,
estou com um probleminha, e não tenho ideia de como resolver ,

estou buscando uma lista de datas para selecionar em um SelectOneMenu,

essas datas depende de outro SelectOneMenu Agenda, no caso da esse erro,

08:25:53,735 GRAVE [javax.enterprise.resource.webcontainer.jsf.context] (http–127.0.0.1-8080-1) java.lang.ClassCastException: java.sql.Timestamp cannot be cast to java.lang.String

debugando, percebi que a data vem com esse formato, por isso do erro talves,

2012-01-10 00:00:00.0

Aqui esta o .xhtml

<div class="campo-grupo"> <h:outputLabel value="Data" /> <p:selectOneMenu id="data" required="true" requiredMessage="A data é obrigatória" style="height: 23px; width: 335px;" value="#{consultaMedicaBean.dataSelecionada}"> <f:selectItem itemLabel="SELECIONE" itemValue="" noSelectionOption="true" /> <f:selectItems value="#{consultaMedicaBean.datas}" var="d" itemValue="#{d}" itemLabel="#{d}" /> <f:convertDateTime type="date" pattern="dd/MM/yyyy"/> </p:selectOneMenu> </div>

o Bean

public List<Date> getDatas() { AgendaMedicaRN agendaMedicaRN = new AgendaMedicaRN (); setDatas(agendaMedicaRN.buscarDatasDisponiveis(agendaMedica)); return datas; }

alguem sabe o problema? Obrigado !

O motivo é porque ele usa o toString() do Objeto.

Você pode fazer um converter para a classe Date ou então um decorator sobrescrevendo o toString() para o modo que você quer.

Qualquer dúvida só falar.

Obrigado por responder Otavio,

eh um seguinte me explique melhor sobre esse converter Date ai,

Você pode usar o um Decorator para encapsular a data e imprimir do modo que você quer.

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

public class DataDecorator implements Serializable {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = -3336204428247229666L;
	private Date date;

	public Date getDate() {
		return date;
	}

	public void setDate(Date date) {
		this.date = date;
	}
	
	
	@Override
	public String toString() {
		 	SimpleDateFormat formatBra;     
	       formatBra = new SimpleDateFormat("dd/MM/yyyy");  
	       return formatBra.format(date);
	}

}

Não tenho nem como testar, mas acredito que assim vai
olha o xhtml. O converterDataTime ficaria dentro do SelectItems

<div class="campo-grupo">  
                <h:outputLabel value="Data" />  
                <p:selectOneMenu id="data"   
                    required="true" requiredMessage="A data é obrigatória"  
                    style="height: 23px; width: 335px;"  
                    value="#{consultaMedicaBean.dataSelecionada}">  
                    <f:selectItem itemLabel="SELECIONE" itemValue=""  
                        noSelectionOption="true" />  
                    <f:selectItems value="#{consultaMedicaBean.datas}" var="d"  
                        itemValue="#{d}" itemLabel="#{d}" >  
                    <f:convertDateTime type="date" pattern="dd/MM/yyyy"/>  
 </f:selectItems>
                </p:selectOneMenu>  
            </div> 

Olha só a data que eu tô respondendo isso… Mas o que vale é a intenção. Pouco tempo que programo e tive um problema parecido. Como resolvi???

  • Dentro da minha classe tinha uma propriedade chamada ‘data’;
  • Criei um método dentro da minha classe chamado getDataFormatada;
public String getDataFormatada(){
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
        return sdf.format(this.data);
}
  • Depois eu chamei esse método dentro do meu xhtml;
<p:selectOneMenu value="#{testeBean.viagem}" converter="entityConverter">
        <f:selectItem itemLabel="Todas" />
        <f:selectItems value="#{testeBean.viagens}" var="viagem" 
             itemValue="#{viagem}" itemLabel="#{viagem.dataFormatada}" >
        </f:selectItems>
</p:selectOneMenu>

Prontinho… rsrs… No meu caso funcionou perfeitamente. Espero que ajude mais alguém.