Как использовать «якорь» со связанным текстом (который не является связываемым) - PullRequest
0 голосов
/ 16 февраля 2019

Из этого вопроса ( Гиперссылка внутри поля метки в Vaadin 12 ) Я смог использовать HTML-компонент Vaadin для создания пользовательского HTML-кода (и он работал нормально, включая добавление ссылок Ahref и т. Д.)

Однако Vaadin предоставляет компонент «Якорь», который представляется гораздо более мощным (и потенциально более безопасным) способом создания ссылок, которые можно использовать для перехода к другим классам, которые я создал, или к внешнему веб-сайту (или дажедля загрузки динамически сгенерированных данных в потоковом режиме).

Однако что, если я хочу, чтобы как обычный текст в виде метки, так и ахорная ссылка отображались в одном абзаце?Например, в «обычном html» я мог бы просто сделать это:

<p>
This is my normal text. 
Download <a href="/resources/excelTemplate.xlsx" download> this Excel file</a>
and follow the instructions therein
</p>

, и это создаст ссылку где-нибудь в моем <p>...</p> абзаце.Как я могу сделать это в Vaadin с объектом Anchor?Лучшее, что я придумала до сих пор, - это использование горизонтальной компоновки, а затем добавление метки, ахора, а затем другой метки - но это действительно очень уродливо и технически не дает того же эффекта (оно не будет правильно оборачиваться)..) Другой вариант - НЕ использовать «Якорь», а просто использовать компонент «HTML» и просто создавать ссылки везде, но это тоже кажется немного уродливым (хотя я полагаю, что это хороший обходной путь).(Я предполагаю, что я могу вызвать любой пользовательский интерфейс, который я создаю, вставив ссылки url в вызовы ahref ....) Мысли о «правильном Java Vaadin» способе сделать это?

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019
Paragraph p = new Paragraph("para");
Anchor a = new Anchor("go", "www.go.com");
p.add(a);
p.addClickListener(e-> UI.getCurrent().navigate(a.getHref()));
0 голосов
/ 16 февраля 2019

Vaadin 10+ предлагает вам (по крайней мере) три способа решения такого рода дел.Вы упомянули два из ..

Создание композиции компонентов в Java.Вместо VerticalLayout вы можете обернуть содержимое в Div и использовать текстовый компонент также в Div вместо Label.Вы можете создать этот тип пользовательского компонента, расширив Composite.

Второй вариант - использовать HTML-компонент, как вы упомянули.

Третий вариант - создать собственный HTML-шаблон полимера и подключиться к нему.с классом PolymerTemplate.Это приведет к тому, что пользовательский компонент будет вести себя как пользовательский компонент первого параметра.Это просто другой способ реализации.

Какой из трех вариантов является правильным.С точки зрения структуры все они.Какой из них подходит вам, зависит от ваших предпочтений и применения.

...