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