Как изменить текст ссылки в Wicket? - PullRequest
10 голосов
/ 14 июля 2010

Я создал ссылку со статическим текстом.Это прекрасно работает, но теперь я также хочу изменить текст, когда вы нажимаете на ссылку.

Я получил следующее:

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

Я надеюсь, что вы можете дать мне несколько простых советов -Я действительно новичок в этом:)

С наилучшими пожеланиями, Элиас

Ответы [ 6 ]

18 голосов
/ 14 июля 2010

HTML:

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

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

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

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")))

        );

    }

}

Я склонен использовать wicket: container, чтобы не загрязнять HTML лишними элементами (wicket: container winне будут сданы в производство)

8 голосов
/ 14 июля 2010

вам нужно вернуть текст в ссылку с его собственной моделью:

<a wicket:id="doAnything"> <span wicket:id="linktext"/> </a>

и в java:

add(new Link("doAnything").add(new Label("linktext", Model.of("i 'm the text"));

еще лучше, если вы используетеa (составное) PropertyModel и функция getLinktext () возвращает текст в зависимости от состояния.

7 голосов
/ 09 декабря 2015

Нет необходимости вносить изменения в html:

Link link = new Link("doAnything") {
    @Override
    public void onClick() {
            // change the text!
            // this.modelChanging();
            // this.detach();
    }
});
link.setBody(Model.of("visible link name"));

add(link);
0 голосов
/ 20 сентября 2016

используйте HTML-тег, как показано ниже, для вашей ссылки и установите текст в файле свойств для ключа, чтобы использовать его.

HTML:

<a wicket:id="doAnything"><wicket:message key="label.LABLENAME" /></a>

Свойство:

label.LABLENAME        =YOUR OWN TEXT FOR LABLE!

Java:

add(new BookmarkablePageLink<YOURCLASS>(
            "doAnything", YOURCLASS.class)));

Выводом будет метка ссылки с текстом, указанным в файле свойств.Просто измените соответствующий текст в свойствах на любой текст, который вы хотите.

0 голосов
/ 04 марта 2016

В нашем проекте Wicket 6 мы используем что-то подобное:

public abstract class AjaxLabeledLink extends AjaxLink {

private IModel<String> text = new Model<>();

public AjaxLabeledLink(String string) {
    super(string);
    this.text = new Model<>("");
}

public AjaxLabeledLink(String string, String linkText) {
    super(string);
    this.text = new Model<>(linkText);
}

public AjaxLabeledLink(String string, IModel<String> linkText) {
    super(string);
    this.text = linkText;
}

@Override
public IModel<?> getBody() {
    return text;
}

public IModel<String> getText() {
    return text;
}

public void setText(IModel<String> text) {
    this.text = text;
}
}

Этот компонент удовлетворяет наши потребности.

0 голосов
/ 27 августа 2014

Wicket не может изменить текстовый атрибут вашей ссылки, поэтому добавьте новый html-компонент для взлома.

Я не согласен с этой философией, и предпочитаю оставить это человеку ситуации: javascript.

add(new AjaxLink("doAnything") {
    @Override
    public void onClick(final AjaxTarget t) {
            // change the text!
            t.appendJavaScript( "document.getElementById('idofyourlink').text = 'newtext';" );
            // this.modelChanging();
            // this.detach();
    }
});

Таким образом, вам не нужна дополнительная метка / интервал внутри элемента <a>.

Вы можете изменить свой текст из Java, если вам нужно. Если нет, просто сделайте это из javascript.

...