Как сделать кликабельную ссылку на сторонний ресурс

Добрый день!
Подскажите, существует поле textArea, куда пользователем вручную вставляется ссылка на другое приложение.
Нужно сделать так, чтобы этот текст стал кликабельной ссылкой и открывалась новая вкладка в браузере (после сохранения и при просмотре деталей сущности в другом окне). Перерыл форум, не нашёл подобных действий. Версия 2.1.

Здравствуйте!

Не совсем понял, в какой момент должен осуществляться переход по ссылке.
В любом случае - Вы можете использовать стандартный html-компонент для отображения ссылок - anchor.
Ex:

        <anchor text="Go to google" href="https://google.com" target="BLANK"/>

Просто добавьте его в XML и задайте нужную ссылку (например через контроллер).

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

С уважением,
Дмитрий

image

Попробую точнее объяснить. К примеру есть вот такая сущность, которая хранит в себе какие-то поля и поле “Ссылка”. Пользователь при создании/редактировании вставляет текст в поле “Ссылка”. И после сохранения должна появляться возможность в режиме редактирования/просмотра кликать на эту ссылку.

image
В идеале ещё бы и отсюда кликать.

Спасибо, что пояснили более подробно.
В таком случае у Вас есть несколько вариантов для этого.

Варианты для формы редактирования:

  1. Этот вариант подходит только в том случае, когда поле не принимает состояние readOnly.
    Вы можете добавить кнопку как suffix для textField, которая берёт значение из вашего textField, либо же из сущности, и затем программным образом открывает ссылку.

    Пример кода:

         <textField id="linkTextField" label="Link">
             <suffix>
                 <button id="linkButton" icon="EXTERNAL_LINK" themeNames="icon tertiary-inline"/>
             </suffix>
         </textField>
    
     @Subscribe("linkButton")
     protected void onLinkButtonClick(ClickEvent<JmixButton> event) {
         String link = linkTextField.getTypedValue();
    
         if (link != null) {
             UI.getCurrent().getPage().open(link, "_blank");
         }
     }
    
  2. Это вариант подходит в том случае, если поле в состоянии readOnly.
    Вы можете заменить свой textField на вышеописанный anchor компонент и переходить по ссылке как по любой-другой гиперссылке.

Варианты для таблицы:

В целом, тут всё то же самое.

  1. Можете использовать кнопку для открытия в качестве renderer колонки.
    Примеры, как это сделать есть в UI Samples: https://demo.jmix.io/ui-samples/sample/data-grid-custom-renderer

  2. Вместо кнопки вы можете использовать тот же компонент anchor, который, как я думаю, будет более органично смотреться в таблице.
    Программное создание anchor представлено в следующем примере: https://demo.jmix.io/ui-samples/sample/html-programmatically

Думаю, какой-нибудь из этих вариантом Вам подойдёт.

С уважением,
Дмитрий

Я пытался по всякому прикруть anchor к полю textAreField в экране с состоянием readOnly, но так и не получилось( Можно какой-нибудь пример?

В состоянии readOnly вы не можете использовать prefix и suffix для компонентов.

Но вы можете использовать setHelperComponent вместо них.
Или же отображать вместо textField только anchor;

Вот пример с helperComponent

        TextField textField = new TextField();
        textField.setHelperComponent(new Anchor("https://google.com", "Перейти по ссылке"));
        textField.setReadOnly(true);
        add(textField);

С уважением,
Дмитрий