Превратить ссылки в панелях калитки в гиперссылки

Я пытаюсь найти способ автоматического преобразования ссылок на панели в гиперссылки. Так, например, пользовательский ввод:

"And here you can find my awesome example: http://example.com"

Можно ли в wicket добавить элемент привязки к каждому тексту "http://...", поэтому приведенный выше пример будет выводить

"And here you can find my awesome example: <a href="http://example.com">http://example.com</a>"

вместо?

2 ответа

Решение

Вы можете использовать встроенную в SmartLinkLabel калитку.

Из Javadoc:

Если у вас есть адреса электронной почты или веб-адреса в данных, которые вы отображаете, то вы можете автоматически отображать эти фрагменты данных в виде гиперссылок, вам не придется предпринимать никаких действий для преобразования этих данных.

Один из способов сделать это - расширить Label и переопределить onComponentTagBody.

Что-то вроде:

public class AnchorizeLabel extends Label {

    public AnchorizeLabel(String id, String body) {
        super(id, body);
    }

    @Override
    protected void onComponentTagBody(MarkupStream stream, ComponentTag tag) {
        String newBody = createAnchors(getDefaultModelObjectAsString());
        replaceComponentTagBody(stream, tag, newBody);
    }

    private String createAnchors(String body) { 
        // regex magic to create links
    }
}

Вы также можете сделать это с помощью собственного IModel или IConverter, но я предпочитаю подход Label.

Другие вопросы по тегам