Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Wicket:模板中的条件显示_Java_Templates_Wicket - Fatal编程技术网

Java Wicket:模板中的条件显示

Java Wicket:模板中的条件显示,java,templates,wicket,Java,Templates,Wicket,Hy, 我希望仅在特定条件下(例如,仅当我有数据填充wicket模板时)显示wicket模板的特定部分(例如div)。问题是: 如果我只在获得数据时添加面板(填充div),那么每次调用没有数据的页面时都会引发异常(因为引用的wicket id没有添加到组件树中) 我想到的唯一解决办法是在没有数据的情况下添加一个空面板。这不是一个理想的解决方案,因为我在java代码中得到了一些不需要的代码,在呈现的html中得到了许多空div 那么,有没有更好的解决方案,只在一定条件下包含wicket模板的几个部

Hy, 我希望仅在特定条件下(例如,仅当我有数据填充wicket模板时)显示wicket模板的特定部分(例如div)。问题是:

如果我只在获得数据时添加面板(填充div),那么每次调用没有数据的页面时都会引发异常(因为引用的wicket id没有添加到组件树中)

我想到的唯一解决办法是在没有数据的情况下添加一个空面板。这不是一个理想的解决方案,因为我在java代码中得到了一些不需要的代码,在呈现的html中得到了许多空div


那么,有没有更好的解决方案,只在一定条件下包含wicket模板的几个部分呢?

我想这就是为什么会出现这样的问题。在不了解您的代码的情况下,我只能说,我认为您正在做的事情是我将和的某个孩子结合起来做的。如果你愿意告诉更多你想做的事情,或者提供一些代码,我很乐意尽我所能提供帮助。

你可以调用setVisible(false);在您想要隐藏的组件上。

就像@miaubiz所说的,您可以调用setVisible(false),或者您可以重写isVisible()方法,如果可见性是以某些其他状态为条件的(例如,字段已填充)。

是的,您想要重写isVisible。这将使isVisible=false html标记甚至无法呈现到最终的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(); } 
    };

虽然这是一个老问题,但这里可能还有一个解决方案:(和)

更新:现在我自己需要这个功能。我使用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,我认为在这种情况下,wicket的封闭功能看起来更难看。

wicket文档的更多内容():Component.render()按照以下步骤渲染组件:1。确定组件可见性。如果组件不可见,RequestCycle的响应将更改为NullResponse.getInstance(),这是一个响应实现,它只会丢弃其输出。