Вопрос

Hy, я хочу отобразить определенную часть (например, Div) моего калитки только при определенном условии (например, только в том случае, если у меня есть данные, чтобы заполнить его).Проблема в:

Если я добавляю панель (заполняя div), только если я получил данные, исключение выдается каждый раз, когда я вызываю страницу без данных (поскольку указанный идентификатор калитки не добавляется в дерево компонентов).

Единственное решение, которое пришло мне в голову, — добавить пустую панель, если данных нет.Это не идеальное решение, потому что у меня есть ненужный код в Java-коде и много пустых разделов в моем визуализированном HTML.

Так есть ли лучшее решение включать несколько частей шаблона калитки только при условии?

Это было полезно?

Решение

Хотя это старый вопрос, здесь может быть еще одно решение: калитка: корпусэтот )

Обновлять:Теперь мне самому понадобилась эта функциональность (для реактивный самолет).Я использую WebMarkupContainer один для состояния loggedIn и один для состояния loggedOut и устанавливаю правильную видимость:

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

Преимущество этого для меня заключается в том, что я предотвращаю NullpointerExc в помеченной строке //##, и я думаю, что в этом случае функция заключения калитки выглядела бы для меня более уродливой.

Другие советы

Как сказал @miaubiz, вы можете вызвать setVisible(false) или переопределить метод isVisible(), если видимость обусловлена ​​каким-либо другим состоянием (например, заполненными полями).

Да, вы хотите переопределить isVisible.Это предотвратит рендеринг HTML-разметки isVisible=false даже на конечной HTML-странице.Кроме того, согласно документам (упомянутым в Пустая панель), вы можете использовать Веб-маркупконтейнер в качестве компонента упаковки.

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

Я думаю, именно поэтому есть Пустая панель.Не зная больше о вашем коде, я могу только сказать, что то, что, по моему мнению, вы делаете, я бы сделал с комбинацией какого-нибудь дочернего элемента АннотацияРепитер и Фрагмент.Если вы хотите рассказать больше о том, что вы хотите сделать, и, возможно, предоставить некоторый код, я буду рад помочь, насколько смогу.

вы можете вызвать setVisible(false);на компоненте, который вы хотите скрыть.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top