Pergunta

Hy, Eu quero mostrar uma certa parte (a div por exemplo) do meu postigo-template apenas sob uma determinada condição (por exemplo, só se eu tiver os dados para preenchê-lo). O problema é:

Se eu só adicionar o painel (enchendo o div) se eu tenho os dados, uma exceção é lançada a cada vez que eu chamo a página sem os dados (porque o postigo-id referenciado não é adicionado ao componente de árvore).

A única solução que me veio à mente foi adicionar um painel vazio se não houver dados. Esta não é uma solução ideal, porque eu tenho algum código desnecessária no código java e muitas divs vazios no meu html renderizado.

Então, há uma solução melhor para incluir várias partes de um postigo-template somente sob uma condição?

Foi útil?

Solução

Embora esta é uma velha questão aqui poderia ser mais uma solução: postigo: gabinete (e este )

Atualizar : Agora eu precisava desta funcionalidade por minha auto (para jetwick ). Eu estou usando um WebMarkupContainer para o estado LoggedIn e um para estado loggedout e definir a visibilidade direita:

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);
}

A vantagem deste para mim é que eu evitar uma NullpointerExc no // ## linha marcada eo recurso enclose de postigo ficaria mais feia para mim, neste caso, eu acho.

Outras dicas

Como @miaubiz disse, você pode chamar setVisible (false), ou você pode substituir o método isVisible (), se a visibilidade é condicional para algum outro estado (campos preenchidos, por exemplo).

Sim, você deseja substituir isVisible. Isto irá manter o isVisible = false html marcação do mesmo renderização para a página html final. Além disso, de acordo com os documentos (indicado em EmptyPanel ), você pode usar o WebMarkupContainer como o componente de embrulho.

    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(); } 
    };

Eu acho que é por isso que há EmptyPanel . Sem saber sobre o seu código mais só posso dizer que o que eu acho que você está fazendo é algo que eu faria com a combinação de alguma criança de AbstractRepeater e Fragmento . Se você está disposto a dizer mais sobre o que você quer fazer e talvez fornecer algum código também, eu vou ser feliz para ajudar tanto quanto eu puder.

Você pode chamar setVisible (false); sobre o componente que você deseja esconder.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top