Pregunta

Hy, Quiero mostrar una parte determinada (un div por ejemplo) de mi ventanilla en la plantilla sólo bajo ciertas condiciones (por ejemplo, sólo si tengo los datos para llenarlo). El problema es:

Si sólo añadir el panel (llenando el div) si tengo los datos, se produce una excepción cada vez que llamo a la página sin los datos (ya que el portillo-id se hace referencia no se añade al componente de árboles).

La única solución que vino a la mente fue la de añadir un panel vacío si no hay datos. Esto no es una solución ideal porque me dieron un poco de código que no sean necesarios en el código java-y muchos elementos div vacíos en mi HTML representado.

Entonces, ¿hay una mejor solución para incluir varias partes de un portillo-plantilla sólo bajo una condición?

¿Fue útil?

Solución

A pesar de que esta es una vieja cuestión aquí podría ser una solución más: de garaje: Gracias recinto (y este )

Actualizar : Ahora necesita esta funcionalidad por mi mismo (por jetwick ). Estoy usando WebMarkupContainer uno para el estado loggedin y uno para el estado loggedOut y establecer la visibilidad derecha:

if (loggedIn()) {            
   WebMarkupContainer loggedInContainer = new WebMarkupContainer("loggedIn");
   //## do something with the user
   User user = getUserSomeWhere();
   loggedInContainer.add(new UserSearchLink("userSearchLink"));
   add(loggedInContainer);
   add(WebMarkupContainer("loggedOut").setVisible(false));
} else {
   add(new WebMarkupContainer("loggedIn").setVisible(false));
   WebMarkupContainer loggedOutContainer = WebMarkupContainer("loggedOut");
   loggedOutContainer.add(new LoginLink() {...});
   add(loggedOutContainer);
}

La ventaja de esto para mí es que puedo evitar que un NullpointerExc en el ## // marcada línea y la característica del portillo encierran gustaría ver más feo para mí en este caso creo.

Otros consejos

Al igual que @miaubiz dijo, puede llamar setVisible (falso), o puede reemplazar el método isVisible (), si la visibilidad es condicional a algún otro estado (campos llenos, por ejemplo).

Sí, si desea sustituir isVisible. Esto evitará que el isVisible = false marcado HTML incluso de la representación a la última página html. También, de acuerdo a los docs (mencionado en EmptyPanel ), se puede utilizar el WebMarkupContainer como el componente de envoltura.

    this.add(new SimpleResourceModelLabel(NO_DATA_LABEL){
        private static final long serialVersionUID = 1L;

        @Override
        public boolean isVisible() { return myList.isEmpty(); } 
    });

    final WebMarkupContainer table = new WebMarkupContainer(MY_DATA_TABLE){
        private static final long serialVersionUID = 1L;

        @Override
        public boolean isVisible() { return !myList.isEmpty(); } 
    };

Creo que es por eso que hay EmptyPanel . Sin necesidad de conocer el código sea más sólo puedo decir que lo que creo que está haciendo es algo que me gustaría hacer con la combinación de algunos de los niños AbstractRepeater y Fragmento . Si usted está dispuesto a darle más información sobre lo que quiere hacer y tal vez ofrecer algo de código también, estaré feliz de ayudar lo más que pueda.

puede llamar setVisible (false); el componente que desea ocultar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top