Cuando el usuario pasa, con el tabulador, por una referencia, escribiendo cualquier carácter, al no encontrarlo OX salta la búsqueda. Hasta aquí perfecto, el problema viene cuando selecciona la referencia y vuelve al modelo. Se ha perdido el foco para seguir registrando valores.
He usado OnChange para intentar fijar el foco con getView().setFocus(getChangedProperty()), pero no funciona porque se lanza antes de escoger la referencia y al escogerla y verla reflejada en el modelo, ya no se lanza.
¿Hay alguna forma de recuperar el foco?
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
public class ChooseReferenceAndFocusAction extends ChooseReferenceAction {
private static final Logger LOG = Logger.getLogger(ChooseReferenceAndFocusAction.class);
¿El log que pones sacan el nombre de modelo y de vista correcto, los de la vista raíz?
Esta es la clase, que las llamadas que he puesto para ver el modelo devuelven bien el nombre del modelo. La propiedad "nombreCliente" está editable antes y después de escoger la referencia.
ublic class ChooseReferenceAndFocusAction extends ChooseReferenceAction {
private static final Logger LOG = Logger.getLogger(ChooseReferenceAndFocusAction.class);
Si no consigues que te funcione puedes probar hacerlo por JavaScrip.
Así si que funciona...
Aquí dejo cómo esta hecho:
public class ChooseReferenceAndFocusAction extends ChooseReferenceAction implements IJavaScriptPostAction {
private static final Logger LOG = Logger.getLogger(ChooseReferenceAndFocusAction.class);
Cuando el usuario pasa, con el tabulador, por una referencia, escribiendo cualquier carácter, al no encontrarlo OX salta la búsqueda. Hasta aquí perfecto, el problema viene cuando selecciona la referencia y vuelve al modelo. Se ha perdido el foco para seguir registrando valores.
He usado OnChange para intentar fijar el foco con getView().setFocus(getChangedProperty()), pero no funciona porque se lanza antes de escoger la referencia y al escogerla y verla reflejada en el modelo, ya no se lanza.
¿Hay alguna forma de recuperar el foco?
Hola JE:
Tienes razón, lo acabo de probar y va tan mal como cuentas. Por favor, añadelo como bug para que lo podamos arreglar.
Si lo quieres arreglar mientras tanto tendrás que refinar la acción de escoger.
Ayuda a otros en este foro como yo te ayudo a ti.
¡Gracias!, añadido.
https://openxava.org/xavaprojects/o/OpenXava/m/Issue?detail=ff8080818e0fde8d018e19748fbd0012
Lo estoy intentado, pero no hay forma...
He redefinido el controlador "Reference.search" por
<controlador nombre="ReferenceSearchFocus">
<accion nombre="choose" por-defecto="casi-siempre" clase="com.f4.elencoerp.acciones.ChooseReferenceAndFocusAction">
<accion nombre="cancel" clase="org.openxava.actions.CancelFromCustomListAction">
</accion></accion></controlador>
public class ChooseReferenceAndFocusAction extends ChooseReferenceAction {
private static final Logger LOG = Logger.getLogger(ChooseReferenceAndFocusAction.class);
}
No consigo que se fije el foco en ninguna propiedad de la vista desde donde se lanza la búsqueda. Lo he intentado con
getView.setFocus(xxxx)
getReferenceSubView().getParent().setFocus(xxx)
LO que no he conseguido averiguar es porqué con los detalles (elementCollection) funciona y con las referencias en la vista principal no.
La realidad es que el foco se va fuera de pantalla, al usuario del navegador. ¿por dónde puedo seguir?
Last edit: JOSE ELIAS 2024-06-08
Hola José:
El getView().setFocus("nombreCliente"); debería funcionar si nombreCliente es una propiedad editable de la vista.
¿El log que pones sacan el nombre de modelo y de vista correcto, los de la vista raíz?
Si no consigues que te funcione puedes probar hacerl por JavaScript, algo así:
Ayuda a otros en este foro como yo te ayudo a ti.
¿El log que pones sacan el nombre de modelo y de vista correcto, los de la vista raíz?
Esta es la clase, que las llamadas que he puesto para ver el modelo devuelven bien el nombre del modelo. La propiedad "nombreCliente" está editable antes y después de escoger la referencia.
ublic class ChooseReferenceAndFocusAction extends ChooseReferenceAction {
private static final Logger LOG = Logger.getLogger(ChooseReferenceAndFocusAction.class);
}
Si no consigues que te funcione puedes probar hacerlo por JavaScrip.
Así si que funciona...
Aquí dejo cómo esta hecho:
public class ChooseReferenceAndFocusAction extends ChooseReferenceAction implements IJavaScriptPostAction {
private static final Logger LOG = Logger.getLogger(ChooseReferenceAndFocusAction.class);
}
Hola José:
Me alegra que tengas una solución hasta que arreglemos el bug.
Quizás lo de que getView().setFocus("nombreCliente") no funcione sea otro bug diferente, quizás no funciona justo al cerrar un diálogo.
Si haces una acción en la vista principal que solo tenga getView().setFocus("nombreCliente"), ¿pone el foco en nombreCliente?
Ayuda a otros en este foro como yo te ayudo a ti.