Dynamisch hinzufügen von Komponenten zu ListView in Wicket

Möchte ich ein Formular mit button "Hinzufügen". Nach dem drücken von "Add" Taste neue panel hinzu, um das wicket ListView-element. Wie mache ich das? Ich möchte in der Lage, hinzufügen unbegrenzte Anzahl von Zeilen.

EDIT:

InteractivePanelPage.html

<table>
    <tr>
        <td><a href="#" wicket:id="addPanelLink">Add Panel</a></td>
    </tr>
    <tr wicket:id="interactiveListView">
        <td>
        <span wicket:id="interactiveItemPanel"></span>
        </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>
<span><input type="button" value="BLAAA" wicket:id="simpleButton"/></span>
</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"));
    }
}

Dieser funktioniert einfach nicht. Kann jemand sehen, warum? Dank

Ich denke, man sollte von diesem start-Punkt: cwiki.apache.org/WICKET/forms-with-dynamic-elements.html
um diese Arbeit mit ajax benötigen Sie 2 Dinge: jede Komponente, die Sie aktualisieren in Ihrem ajax-link. setzen Sie ein WebMarkupContainer um Ihre ListView-Steuerelement (z.B. ein <div wicket:id="wmc">) und in der onClick() hinzufügen, dass ling zu dem AjaxRequestTarget target (.addComponent(wmc) Das Ziel enthält alle Komponenten, die aktualisiert via Ajax. Und, setzen Sie wmc.setOutputMarkupId(true); Sie brauchen nicht diese auf die newInteractivePanel
Das hat geholfen. Dank
Sie können es besser mit einer Komponente wie RepeatingView, so dass Sie nicht haben, um wickeln Sie Ihre widgets in einer Liste/ Modell einfach zu fügen Sie diese auf eine Liste.

InformationsquelleAutor zinovii | 2010-01-22

Schreibe einen Kommentar