Wicket: Как добавить адрес ссылки во время выполнения - PullRequest
1 голос
/ 04 сентября 2010

Кто-нибудь знает, как я могу динамически добавить адрес ссылки в Wicket?

1 Ответ

3 голосов
/ 04 сентября 2010

ExternalLink принимает параметр модели, который предоставляет URL ссылки. Эта модель может быть чем угодно. Вот тот, который генерирует случайные ссылки (LoadableDetachableModel - это удобная реализация динамической модели):

IModel<String> model=new LoadableDetachableModel<String>() {
    private static final long   serialVersionUID    = 1L;
    @Override
    protected String load() {
        // this class does not really exist
        return LinkRandomizer.getNewRandomUrl();
    }
};
add(new ExternalLink("link", model));

См:


Оказывается, ОП нужен ListView с ExternalLink с.

Вот панель со списком ссылок:

public class FooPanel extends Panel {

    private static final long   serialVersionUID    = 1L;

    public static class LinkBean{
        private String link;
        private String label;
        public LinkBean(final String link, final String label) {
            this.link = link;
            this.label = label;
        }
        public String getLabel() {
            return this.label;
        }
        public String getLink() {
            return this.link;
        }
        public void setLabel(final String label) {
            this.label = label;
        }
        public void setLink(final String link) {
            this.link = link;
        }


    }

    public FooPanel(final String id) {
        super(id);
        this.add(new ListView<LinkBean>("item", 
                Arrays.asList(
                    new LinkBean("http://www.google.com/","Google"), 
                    new LinkBean("http://www.ebay.com/", "Ebay"))
                ) {

            private static final long   serialVersionUID    = 1L;

            @Override
            protected void populateItem(final ListItem<LinkBean> item) {
                item.add(new ExternalLink("link", item.getModelObject().getLink())
                    .add(new Label("label",item.getModelObject().getLabel()))
                );

            }
        });
    }
}

А вот соответствующий HTML:

<html><head></head><body>
<wicket:panel>
    <div class="linkItem" wicket:id="item">
        <a href="" wicket:id="link" >
            <wicket:container wicket:id="label" />
        </a>
    </div>
</wicket:panel>
</body></html>

Вывод будет примерно таким:

<div class="linkItem"><a href="http://www.google.com/">Google</a></div>
<div class="linkItem"><a href="http://www.ebay.com/">Ebay</a></div>

См

...