Yendo a lo básico, tengo guardado en una Lista una serie de Citas (la aplicación es la gestión de una peluquería). Para cargar los eventos al calendario, hago lo siguiente (funciona correctamente):
Código:
El problema lo tengo al hacer un resize o mover el evento a otra hora, que hago lo siguiente:@PostConstruct public void init(){ List<Cita> citas; citas = citaLN.recuperarTodasCitas(); System.out.println(citas.get(0).getFechaIni()); System.out.println(citas.get(0).getFechaFin()); for (int i = 0; i < citas.size(); i++){ eventModel.addEvent(new DefaultScheduleEvent(citas.get(i).getNombre(), citas.get(i).getFechaIni(), citas.get(i).getFechaFin(), citas.get(i))); } }
Código:
Como apunte, citaLN es un session bean, y con el método recuperarTodasCitas() me devuelve el listado de citas almacenadas en la BD (esto funciona correctamente). Lo mismo con modificarCita(Cita), actualiza la cita en la BD.public void onEventMove(ScheduleEntryMoveEvent event) { List<Cita> listaCitas = citaLN.recuperarTodasCitas(); System.out.println(listaCitas.get(0).getFechaIni()); System.out.println(listaCitas.get(0).getFechaFin()); FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Event moved", "Day delta:" + event.getDayDelta() + ", Minute delta:" + event.getMinuteDelta()); addMessage(message); ScheduleEvent ev = event.getScheduleEvent(); Cita cita = (Cita) ev.getData(); citaLN.modificarCita(cita); }
Como podéis ver, en la llamada para iniciar, hago dos Print, donde muestro la única cita que tengo guardada en la BD, y el resultado es: Mon Nov 11 11:00:00 CET 2013 y Mon Nov 11 12:00:00 CET 2013 (fecha de inicio y fin de la cita). Hasta aquí todo correcto, el problema es al mover el evento por ejemplo 1 hora más tarde, los print que me muestra son Mon Nov 11 12:00:00 CET 2013 y Mon Nov 11 13:00:00 CET 2013.
Esto para mí no tiene sentido, ya que lo que estoy mostrando en los print de el evento onEventMove es la misma llamada que en la función de inicializar. Una llamada la BD que me devuelve la lista de Citas. Es decir, parece que ya esté modificado cuando a mi parecer no debería de estarlo.
El problema es que al hacer citaLN.modificarCita(cita), no realiza la modificación, y he llegado a la conclusión que no lo hace porque al igual que el método de citaLN.recuperarTodasCitas() sale como modificado, aquí también, y no modifica la cita porque ve que es la misma.
He creado otro método para guardar en esa cita los valores que tenía el evento antes de moverlo, es decir de 11 a 12, y luego modificarlo de nuevo con los valores nuevos (de 12 a 13), y así sí que me guarda en la base de datos la modificación.
Esta solución es bastante cutre, y me gustaría poder solucionarlo de una forma correcta y saber por qué pasa esto. Lo más seguro es que sea un fallo conceptual mío de base, por eso pregunto a ver si algún sabio de este tema me puede ayudar a entender el comportamiento.
Un saludo y gracias!