hy,我只想在某个条件下显示一个门板的某个部分(例如,一个DIV)(例如,只有当我有数据填充数据时)。问题是:

如果我只在获取数据的情况下添加面板(填充 div),则每次调用没有数据的页面时都会引发异常(因为引用的 wicket-id 未添加到组件树中)。

我想到的唯一解决方案是如果没有数据则添加一个空面板。这不是一个理想的解决方案,因为我在 java 代码中得到了一些不需要的代码,在渲染的 html 中得到了许多空的 div。

那么是否有更好的解决方案仅在某种条件下包含 wicket-template 的多个部分?

有帮助吗?

解决方案

虽然这是一个老问题这里可以是一个更溶液:便门:外壳 (和

更新:现在我需要这个功能由我自己(的 jetwick )。我使用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(假),或可以覆盖ISVISIBLE()方法,如果可见性是有条件的其他一些状态(填充字段,例如)。

是的,你想重写 isVisible。这将使 isVisible=false html 标记无法渲染到最终的 html 页面。另外,根据文档(在 空面板),您可以使用 Web标记容器 作为包装组件。

    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(假);在组件上要隐藏。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top