Hi,

you'll have to tell the request target which components to redraw:
Put your list inside a markupcontainer and use addComponent().

Sven

zdmytriv wrote:
Could anyone tell me why it doesn't work? Thanks

InteractivePanelPage.html

<table>
    <tr>
        <td> # Add Panel </td>
    </tr>
    <tr wicket:id="interactiveListView">
        <td>
</td>
    </tr>
</table>

InteractivePanelPage.java

// ... imports
public class InteractivePanelPage extends WebPage {
    public LinkedList<InteractivePanel> interactivePanels = new
LinkedList<InteractivePanel>();

    private ListView<InteractivePanel> interactiveList;

    public InteractivePanelPage() {
        add(new AjaxLink<String>("addPanelLink") {
            private static final long serialVersionUID = 1L;

            @Override
            public void onClick(AjaxRequestTarget target) {
                try {
                    System.out.println("link clicked");

                    InteractivePanel newInteractivePanel = new
InteractivePanel(
                            "interactiveItemPanel");
                    newInteractivePanel.setOutputMarkupId(true);

interactiveList.getModelObject().add(newInteractivePanel);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });

        interactivePanels.add(new InteractivePanel("interactiveItemPanel"));

        interactiveList = new
ListView<InteractivePanel>("interactiveListView",
                new PropertyModel<List<InteractivePanel>>(this,
"interactivePanels")) {
            private static final long serialVersionUID = 1L;

            @Override
            protected void populateItem(ListItem<InteractivePanel> item) {
                item.add(item.getModelObject());
            }
        };

        interactiveList.setOutputMarkupId(true);

        add(interactiveList);
    }

    public List<InteractivePanel> getInteractivePanels() {
        return interactivePanels;
    }
}

InteractivePanel.html

<html xmlns:wicket>
<wicket:panel>
<input type="button" value="BLAAA" wicket:id="simpleButton"/>
</wicket:panel>
</html>

InteractivePanel.java

// ... imports
public class InteractivePanel extends Panel {
    private static final long serialVersionUID = 1L;

    public InteractivePanel(String id) {
        super(id);

        add(new Button("simpleButton"));
    }
}








zkn wrote:
On 22.01.2010, at 03:18, [email protected] wrote:

http://old.nabble.com/dynamically-adding-components-to-a-ListView-td26626657.html

In this post you said "You found it". Could you please post how did you
do it?

Zinovii
in addPanel()

replaced
panels.add(panel);

with

panels.getModelObject().add(panel);





On 04.12.2009, at 00:17, zkn wrote:

found it.

On 03.12.2009, at 16:19, zkn wrote:

Hi,

I'm trying to dynamically add components to an existing ListView but I
can't figure out how to do that. Here is my case:

MyPanelContainer  class with markup

<wicket:panel>
        <wicket:container wicket:id="panels">
                <wicket:container wicket:id="panel" />
        </wicket:container>
# add panel </wicket:panel>

and here is how I create the container in the constructor of my page

..
MyPanelContainer container = new MyPanelContainer("panels_list_1");
List<MyPanel> panels = new ArrayList<MyPanel>();

for (int j = 0; j < 5; j++) {
        MyPanel panel = new MyPanel("panel");
        
        .....
        
        panels.add(panel);
.


container.add(new ListView<MyPanel>("panels", panels) {
        protected void populateItem(ListItem<MyPanel> item) {
                item.add( item.getModelObject());
        }
});
add(Container);
..

This works fine and I can see all  MyPanel inside the container.

Now I'm trying to add another MyPanel inside the container on user
click. Here is the constructor of MyPanelContainer

public MyPanelContainer(String id) {
                super(id);
                ....
                add(new Link("addPanel") {
                                @Override
                                public void onClick() {
                                        addPanel();
                                }
                                
                        });
.

..
public void addPanel() {
                
                ListView< MyPanel > panels = (ListView< MyPanel >) 
get("panels");
                
                MyPanel panel = new MyPanel("panel");
                ...
                panels.add(panel);
        }

Basically addPanel() does the same thing as in page constructor to add
panels to the list but nothing shows up.

Thanks in advance for your help

Ozkan





---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to