How do I change link-text in Wicket?

Sylvus picture Sylvus · Jul 14, 2010 · Viewed 15.6k times · Source

I created a link with static text. That works fine but now I also want to change the text when you click the link.

I got as far as this:

add(new Link("doAnything") {
    @Override
    public void onClick() {
            // change the text!
            // this.modelChanging();
            // this.detach();
    }
});

I hope you can give me some easy advice - I'm really new to this :)

Best regards Elias

Answer

Sean Patrick Floyd picture Sean Patrick Floyd · Jul 14, 2010

The HTML:

<html><head></head><body>
<wicket:panel>

    <a href="" wicket:id="link">
        <wicket:container wicket:id="label" />
    </a>

</wicket:panel>
</body></html>

The java:

public class MyPanel extends Panel{

    private static class Mybean{

        String labelText = "click me";

        public String getLabelText(){
            return this.labelText;
        }

        public void setLabelText(final String labelText){
            this.labelText = labelText;
        }

    }

    public MyPanel(final String id){
        super(id);
        final Mybean bean = new Mybean();
        this.add(new Link<Void>("link"){

            private static final long serialVersionUID = 1L;

            @Override
            public void onClick(){
                bean.setLabelText("Thanks for clicking");
            }
        }.add(new Label("label", new PropertyModel<String>(bean, "labelText")))

        );

    }

}

I tend to use wicket:container in order to not pollute the HTML with superfluous elements (the wicket:container won't be rendered in production)