我正在使用一个应用程序,我需要将子面板集添加到包含作为页面一部分的父面板的其他面板。
一次可以有1到3个父母小组,父母之间可以有7个儿童小组。
我知道所有内容都已正确添加,但是当试图通过wicket中继器添加这些面板时,我的常规方法都不起作用。
我已尝试覆盖ListView的populateItem方法,如:https://cwiki.apache.org/WICKET/listview-and-other-repeaters.html和https://cwiki.apache.org/WICKET/page-with-dynamic-components.html
add(new ListView<ParentPanel>("parentPanels", panels) {
@Override
protected void populateItem(ListItem<ParentPanel> item) {
ParentPanel temp = (ParentPanel) item.getModelObject();
temp.add(new AttributeAppender("class", new Model<String>("panelClass"), ""));
item.add(temp);
}
});
...或标记:
<wicket:container wicket:id="listOfPanels">
<wicket:panel wicket:id="panelClass"/>
</wicket:container>
...甚至将属性修饰符添加到要添加的面板的构造函数中。
所有这些似乎都被忽略了。我错过了什么基本的东西?如果我不必计算要添加的面板的数量和类型,这不会是一个问题,但使用转发器做什么会删除样式?
答案 0 :(得分:2)
将您的属性修饰符添加到Item中,并将Item附加到html标记,该标记呈现为div而不是wicket:未呈现的容器。
您还可以在Item子类中添加该类,并覆盖repeater的newItem()方法以返回您自己的类。请参阅OddEvenListItem作为示例。
答案 1 :(得分:0)
我没有把面板作为tepmlate给ListView是一个很好的做法。这可能更方便
add(new ListView<Object>("parentPanels", panels) {
@Override
protected void populateItem(ListItem<Object> item) {
ParentPanel temp = new ParentPanel("panelClass",item.getModelObject());
//ParentPanel temp = (ParentPanel) item.getModelObject();
temp.add(new AttributeAppender("class", new Model<String>("myPanel"), ""));
item.add(temp);
}
});
也可以尝试像这样的HTML
<div wicket:id="listOfPanels">
<div wicket:id="panelClass"></div>
</div>
这将使用名为 myPanel 的css类生成。
此外,您还需要将css类添加到面板的html及其组件中。
答案 2 :(得分:0)
For simple styles, try something like following
item.add(new AttributeAppender("style", Model.of("padding-top:23px;padding-left:5px")));