题
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(假);在组件上要隐藏。
不隶属于 StackOverflow