Ver Mensaje Individual
  #1 (permalink)  
Antiguo 11/11/2013, 16:16
malome88
 
Fecha de Ingreso: noviembre-2013
Mensajes: 26
Antigüedad: 10 años, 5 meses
Puntos: 0
Problema aplicación JSF + EJB + Schedule Primefaces

Hola, estoy creando una aplicación JSF con EJB + JPA, y tengo un problema (más bien es desconocimiento de la tecnología, ya que soy nuevo en esto). El problema es con el componente Schedule de Primefaces.

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:
@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)));   
            }     
            
    }
El problema lo tengo al hacer un resize o mover el evento a otra hora, que hago lo siguiente:

Código:
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 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.

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!