如何将“锚”与关联的文本(不可链接)一起使用

时间:2019-02-15 21:21:48

标签: vaadin vaadin12

通过这个问题(Hyperlink inside label field in Vaadin 12),我能够使用Vaadin的HTML组件创建自定义html代码(并且工作正常,包括放置ahref链接等)。

但是,Vaadin提供了“锚点”组件,它似乎是创建链接的更强大(且可能更安全)的方式,该链接可用于导航到我构建的其他类或外部网站(甚至以流方式下载动态动态生成的数据)。

但是,如果我想让普通的“类似标签的”文本和achor链接都出现在单个段落中怎么办?例如,在“普通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对象?到目前为止,我想到的最好的方法是使用“水平布局”,然后添加一个标签,一个achor,然后添加另一个标签-但这确实很丑陋,并且在技术上没有相同的效果(无法正确包装) 。)另一个选择是不使用“ Anchor”,而只使用“ HTML”组件并在各处创建ahref链接,但这似乎也很丑陋(尽管我认为这是一个不错的解决方法。)。 (我假设我可以通过将URL链接粘贴在ahref调用中来调用自己构建的任何UI。...)是否对“正确的Java Vaadin”方法有此想法?

2 个答案:

答案 0 :(得分:1)

Vaadin 10+为您提供(至少)三种处理此类案件的方法。您提到了其中的两个。

使用Java组成组件。代替VerticalLayout,您可以将内容包装在Div中,也可以在Div中使用Text组件代替Label。您可以通过扩展Composite来制作这种自定义组件。

第二种选择是使用您提到的HTML组件。

第三个选择是创建自定义html聚合物模板,并使用PolymerTemplate类连接到该模板。这将导致自定义组件的行为类似于第一个选项的自定义组件。这只是不同的实现方式。

三个中的哪一个是正确的方法。从框架的角度来看,所有这些。哪一种最适合您取决于您​​的喜好和应用。

答案 1 :(得分:1)

Paragraph p = new Paragraph("para");
Anchor a = new Anchor("go", "www.go.com");
p.add(a);
p.addClickListener(e-> UI.getCurrent().navigate(a.getHref()));