Hola JP, si desde un TAB seleccionas un registro y levantas un diálogo para hacer alguna acción con este registro, y este diálogo tiene un ManyToOne para escoger y lo usas, el tab anterior se deselecciona solo dejando al diálogo sin poder ejecutar la acción.
Te detallo el código y las imágenes para poder reproducirlo.
En el caso de registrar propiedades planas, como es el caso de texto o fecha, funciona perfectamente, pero en cuanto se usa la referencia ceco para buscar un valor, tab.getSelectedKeys() no devuelve nada.
ACCIÓN PARA ABRIR EL DIÁLOGO
public class AbrirModificacionMasivaPartidas extends ViewBaseAction {
privatestaticfinalLoggerlogger=Logger.getLogger(AbrirModificacionMasivaPartidas.class);@InjectprivateTabtab;@Overridepublicvoidexecute()throwsException{logger.info("---");if(validarSeleccion()){try{showDialog();getView().setModelName("ModificacionMasivaPartidas");getView().setEditable(true);setControllers("ModificacionMasivaPartidas");inicializarInterfaz();}catch(ObjectNotFoundExceptionex){getView().clear();addError("object_not_found");}catch(Exceptionex){ex.printStackTrace();addError("system_error");}}}privatebooleanvalidarSeleccion(){returntrue;}/** * Inicializa la pantalla */privatevoidinicializarInterfaz(){getView().setValue("partidasSeleccionadas",tab.getSelectedKeys().length);}
}
**ACCION MODIFICAR DEL DIALOGO: si se selecciona ceco, tab.getSelectedKeys() no devuelve nada
**
public class ModificarPartidasDesdeModificacionMasivaPartidas extends ViewBaseAction {
La lista de la referencia usa el mismo código que la de la lista principal, cogiendo los datos desde el objeto de sesión xava_tab, que cambiamos en la acción de búsqueda. Por eso tenemos que restaurar el tab principal antes de sacar la lista de nuevo, y eso hace que se pierdan los selecciandos.
Aunque es así por como lo tenemos implementado, sigue siendo un bug. Así que añádelo con un vínculo a este hilo para que busquemos alguna forma de arreglar este caso.
Mientras tanto, puede obtener los tab.getSelectedKeys() antes de llamar a la acción y después de cerrar el diálogo los vuelves a poner en el tab con tab.setAllSelectedKeys().
Ayuda a otros en este foro como yo te ayudo a ti.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hola JP, si desde un TAB seleccionas un registro y levantas un diálogo para hacer alguna acción con este registro, y este diálogo tiene un ManyToOne para escoger y lo usas, el tab anterior se deselecciona solo dejando al diálogo sin poder ejecutar la acción.
Te detallo el código y las imágenes para poder reproducirlo.
En el caso de registrar propiedades planas, como es el caso de texto o fecha, funciona perfectamente, pero en cuanto se usa la referencia ceco para buscar un valor, tab.getSelectedKeys() no devuelve nada.
ACCIÓN PARA ABRIR EL DIÁLOGO
public class AbrirModificacionMasivaPartidas extends ViewBaseAction {
}
**ACCION MODIFICAR DEL DIALOGO: si se selecciona ceco, tab.getSelectedKeys() no devuelve nada
**
public class ModificarPartidasDesdeModificacionMasivaPartidas extends ViewBaseAction {
}
ACCION DE MODIFICACIÓN DE LOS FREGISTROS
public void modificarTerminado(String textoLinea, Date fechaVencimiento2, Ceco ceco2) {
logger.info("---textoLinea:" + ("".equals(textoLinea) ? "null" : textoLinea)
+ ", fechaVencimiento:" + (fechaVencimiento2 == null ? "null" : Utilidades.formatearFecha(fechaVencimiento2, "dd/MM/yyyy"))
+ ", ceco:" + (ceco2 == null ? "null" : ceco2.getAbreviatura()));
if (!"".equals(textoLinea) && textoLinea != null) {
this.setNombre(textoLinea);
}
if (fechaVencimiento2 != null) {
this.setFechaVencimiento(fechaVencimiento2);
}
if (ceco2 != null) {
this.setCeco(ceco2);
}
XPersistence.getManager().persist(this);
}
Last edit: JOSE ELIAS 2021-10-16
Hola José:
La lista de la referencia usa el mismo código que la de la lista principal, cogiendo los datos desde el objeto de sesión xava_tab, que cambiamos en la acción de búsqueda. Por eso tenemos que restaurar el tab principal antes de sacar la lista de nuevo, y eso hace que se pierdan los selecciandos.
Aunque es así por como lo tenemos implementado, sigue siendo un bug. Así que añádelo con un vínculo a este hilo para que busquemos alguna forma de arreglar este caso.
Mientras tanto, puede obtener los tab.getSelectedKeys() antes de llamar a la acción y después de cerrar el diálogo los vuelves a poner en el tab con tab.setAllSelectedKeys().
Ayuda a otros en este foro como yo te ayudo a ti.
Registrado.
https://openxava.org/XavaProjects/o/OpenXava/m/Issue
Hola JE:
Este bug ya está arreglado y el arreglo se incluirá en OpenXava 7.6.3, disponible en unas pocas semanas.