Bom dia pessoa, estava passando com um problema com o componente Calendar do primefaces.
Tentava usar o componente no modo inline com data horas e minutos. Acontecia que ele sempre retornava um erro ({0} Ocorreu um erro na conversão).
Foi então que eu desativei o modo inline e a conversão funcionava perfeitamente, eu não sei explicar o motivo do erro mas vou postar aqui como eu resolvi este problema caso alguém esteja passando por isso…
A solução foi bem simples, bastou implementar meu próprio conversor e aplicar ao componente. Segue abaixo a implementação do mesmo. Caso alguém queira melhorar o código fique a vontade e poste de volta…
public class CalendarConverter implements Converter {
private static Date dateTime = new Date();
@Override
public Object getAsObject(FacesContext fc, UIComponent uic, String string) {
Calendar calendar = Calendar.getInstance();
if(string.length() >5){
calendar.setTime(dateTime);
String[] split = string.split("/");
calendar.set(Integer.valueOf(split[2]),
Integer.valueOf(split[1]),
Integer.valueOf(split[0]));
dateTime.setTime(calendar.getTimeInMillis());
}else{
calendar.setTime(dateTime);
String[] split = string.split(":");
calendar.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split[0]));
calendar.set(Calendar.MINUTE, Integer.valueOf(split[1]));
dateTime.setTime(calendar.getTimeInMillis());
}
Date toReturn = new Date(calendar.getTimeInMillis());
return toReturn;
}//end method
@Override
public String getAsString(FacesContext fc, UIComponent uic, Object o) {
return o.toString();
}//end method
}//end class
Componente
<p:calendar navigator="true" locale="br" pattern="dd/MM/yyyy HH:mm"
value="#{agendaFaces.agenda.dataHora}"
minMinute="0" maxMinute="0" converter="CalendarConverter" mode="inline">
<p:ajax event="dateSelect"></p:ajax>
</p:calendar>