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.