设计通过转发器添加的检票口组件

时间:2012-05-23 21:32:25

标签: wicket

我正在使用一个应用程序,我需要将子面板集添加到包含作为页面一部分的父面板的其他面板。

一次可以有1到3个父母小组,父母之间可以有7个儿童小组。

我知道所有内容都已正确添加,但是当试图通过wicket中继器添加这些面板时,我的常规方法都不起作用。

我已尝试覆盖ListView的populateItem方法,如:https://cwiki.apache.org/WICKET/listview-and-other-repeaters.htmlhttps://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>

...甚至将属性修饰符添加到要添加的面板的构造函数中。

所有这些似乎都被忽略了。我错过了什么基本的东西?如果我不必计算要添加的面板的数量和类型,这不会是一个问题,但使用转发器做什么会删除样式?

3 个答案:

答案 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")));