Menu

bug en mostrar/ocultar filtro en colecc?

pepe
2012-07-13
2012-11-26
  •  pepe

    pepe - 2012-07-13

    No sé si es un bug, pero me ocurre que el mostrar y ocultar filtro no funciona en colecciones dentro de diálogos, si le doy a ocultar filtro no se ve el enlace para mostrarlo

     
  • Javier Paniza

    Javier Paniza - 2012-07-16

    Hola Pepe,

    lo he probado y a mi sí que funciona. Lo he probado aquí:
    http://www.openxava.org/web/guest/delivery
    Creas un nuevo Delivery, y desde ahí das a añadir Invoice, en la pestaña de detalles hay una colección (que está en un diálogo) donde se puede ocultar y mostrar el filtro sin problemas. Pruebalo tú y lo verás.

    Tu problema tendrá que ver con alguna particularidad de tu caso. Crea un ejemplo con la cantidad mínima de código posible que reproduzca el problema, ponlo aquí y lo probaré.

    -------
    Ayuda a otros en este foro como yo te ayudo a ti
    y no olvides leer el libro de OpenXava.

     
  •  pepe

    pepe - 2012-07-17

    me sale un error extraño:

    org.openxava.util.ElementNotFoundException: El módulo undefinedshow-filter.gif no está definido
    at org.openxava.application.meta.MetaApplication.getMetaModule(MetaApplication.java:145)
    at org.openxava.controller.ModuleManager.getMetaModule(ModuleManager.java:1022)
    at org.openxava.controller.ModuleManager.setupModuleControllers(ModuleManager.java:230)
    at org.openxava.controller.ModuleManager.setModuleName(ModuleManager.java:995)
    at org.apache.jsp.xava.module_jsp._jspService(module_jsp.java:166)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
    at org.openxava.web.servlets.ModuleServlet.doGet(ModuleServlet.java:24)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
    at java.lang.Thread.run(Unknown Source)
    17-jul-2012 13:51:04 org.apache.catalina.core.StandardWrapperValve invoke
    GRAVE: Servlet.service() para servlet module lanzó excepción

     
  • Javier Paniza

    Javier Paniza - 2012-07-19

    Hola Pepe,

    la pregunta es: ¿qué tengo que hacer yo para reproducirlo?
    Pon aquí un ejemplo de código lo más sencillo posible que reproduzca el problema junto con los pasos que debo de dar. Intentaré reproducirlo.

    -------
    Ayuda a otros en este foro como yo te ayudo a ti
    y no olvides leer el libro de OpenXava.

     
  •  pepe

    pepe - 2012-07-20

    Ya está!!! Lo conseguí reproducir!!!

    Clases de Prueba:

    Una clase PruebaPersona que contiene una colección de elementos PruebaHijo. La clase PruebaHijo tiene dos colecciones: de elementos PruebaCoche y elementos PruebaCasa.

    El botón de mostrar/ocultar el filtro de la colección PruebaCoche funciona correctamente hasta que añadí la segunda colección PruebaCasa.

    Quizás el error esté en que las dos colecciones de PruebaHijo tienen el mismo nombre de referencia (pruebaHijo):

    @OneToMany(mappedBy="pruebaHijo")
    @AsEmbedded
    private Collection<PruebaCoche> coches;
    
    @OneToMany(mappedBy="pruebaHijo")
    @AsEmbedded
    private Collection<PruebaCasa> casas;
    

    Esto lo digo sin ninguna prueba.

    package org.modelo;
    import java.util.Collection;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.OneToMany;
    import org.openxava.annotations.AsEmbedded;
    import org.openxava.annotations.Hidden;
    @Entity
    public class PruebaPersona {
        @Id
        @Hidden
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private int id;
        private String nombre;
        @OneToMany(mappedBy="pruebaPersona")
        @AsEmbedded
        private Collection<PruebaHijo> hijos;
    
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getNombre() {
            return nombre;
        }
        public void setNombre(String nombre) {
            this.nombre = nombre;
        }
        public void setHijos(Collection<PruebaHijo> hijos) {
            this.hijos = hijos;
        }
        public Collection<PruebaHijo> getHijos() {
            return hijos;
        }
    }
    package org.modelo;
    import java.util.Collection;
    import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.ManyToOne;
    import javax.persistence.OneToMany;
    import org.openxava.annotations.AsEmbedded;
    import org.openxava.annotations.Hidden;
    @Entity
    public class PruebaHijo {
        @Id
        @Hidden
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private int id;
        private String nombre;
    
        @ManyToOne(fetch = FetchType.LAZY)
        private PruebaPersona pruebaPersona;
    
        @OneToMany(mappedBy="pruebaHijo")
        @AsEmbedded
        private Collection<PruebaCoche> coches;
    
        @OneToMany(mappedBy="pruebaHijo")
        @AsEmbedded
        private Collection<PruebaCasa> casas;
    
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getNombre() {
            return nombre;
        }
        public void setNombre(String nombre) {
            this.nombre = nombre;
        }
        public void setPruebaPersona(PruebaPersona pruebaPersona) {
            this.pruebaPersona = pruebaPersona;
        }
        public PruebaPersona getPruebaPersona() {
            return pruebaPersona;
        }
        public void setCoches(Collection<PruebaCoche> coches) {
            this.coches = coches;
        }
        public Collection<PruebaCoche> getCoches() {
            return coches;
        }
        public void setCasas(Collection<PruebaCasa> casas) {
            this.casas = casas;
        }
        public Collection<PruebaCasa> getCasas() {
            return casas;
        }
    
    }
    package org.modelo;
    import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.ManyToOne;
    import org.openxava.annotations.Hidden;
    @Entity
    public class PruebaCoche {
        @Id
        @Hidden
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private int id;
        private String marca;
    
        @ManyToOne(fetch = FetchType.LAZY)
        private PruebaHijo pruebaHijo;
    
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getMarca() {
            return marca;
        }
        public void setMarca(String marca) {
            this.marca = marca;
        }
        public PruebaHijo getPruebaHijo() {
            return pruebaHijo;
        }
        public void setPruebaHijo(PruebaHijo pruebaHijo) {
            this.pruebaHijo = pruebaHijo;
        }
    }
    package org.modelo;
    import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.ManyToOne;
    import org.openxava.annotations.Hidden;
    @Entity
    public class PruebaCasa {
        @Id
        @Hidden
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private int id;
        private String domicilio;
    
        @ManyToOne(fetch = FetchType.LAZY)
        private PruebaHijo pruebaHijo;
    
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public void setDomicilio(String domicilio) {
            this.domicilio = domicilio;
        }
        public String getDomicilio() {
            return domicilio;
        }
        public PruebaHijo getPruebaHijo() {
            return pruebaHijo;
        }
        public void setPruebaHijo(PruebaHijo pruebaHijo) {
            this.pruebaHijo = pruebaHijo;
        }
    }
    <modulo nombre="PruebaPersona">
        <modelo nombre="PruebaPersona"/>
        <controlador nombre="Typical" />
    </modulo>
    
     
  •  pepe

    pepe - 2012-07-20

    No, no es por eso, no sé por que és. Solo sé que el mostrar/ocultar filtro de PruebaCoche funciona correctamente si PruebaHijo no contiene la segunda colección PruebaCasa.

    Sigo investigando …

     
  • Javier Paniza

    Javier Paniza - 2012-07-24

    Hola Pepe,

    con tu código lo he conseguido reproducir. ¡Bien hecho! Parece que el problema es la ruta de la imagen, porque si lo pruebas con Chrome aparece el símbolo de imagen rota que sí que se puede pulsar para volver a mostrar los filtros.
    Añádelo como bug con un vínculo a este hilo y lo arreglaremos.

    -------
    Ayuda a otros en este foro como yo te ayudo a ti.
    Antes de poner una pregunta busca en este mismo foro la respuesta
    y lee la documentación de OpenXava en openxava.org.

     

Log in to post a comment.