1

我正在尝试从下面的屏幕中获取输入并将 Birt Report 直接打开为 PDF。(我正在使用 Vaadin 14)

问题: 每次加载此 UI 时,我的锚点/按钮都不会在第一次单击时打开任何链接。但是从第二次单击开始单击一次后,它工作正常。任何想法可能是什么问题以及我犯了什么错误?

在此处输入图像描述

以下是我的全局变量:

final Button                    printButton                     =
    new Button("Print Report", VaadinIcon.PRINT.create());
String                          url                             = null;
final Anchor                    anchorReport                    = new Anchor();

我的构造函数:

public AssignmentCompletedAllRPTView()
{
    super();
    this.initUI();
    this.radioButtonGroup.setItems("Yes", "No");
    this.printButton.addClickListener(new ComponentEventListener<ClickEvent<Button>>()
    {
        @Override
        public void onComponentEvent(final ClickEvent<Button> event)
        {
            AssignmentCompletedAllRPTView.this.printButton();
        }
    });
    this.ConfigureReportButton();
}

配置报告按钮():

private void ConfigureReportButton()
{
    this.anchorReport.setTarget("_blank");
    this.anchorReport.add(this.printButton);
    this.buttonHorizontalLayout.add(this.anchorReport);
}

打印按钮():

private void printButton()
{
        final String reportURL = //--URL
        this.anchorReport.setHref(reportURL);
}
4

2 回答 2

1

这里有两个组件: aButton和 an Anchor。你Button被放置在Anchorin 中ConfigureReportButton。您Button还在构造函数中获得了一个点击监听器。

当您第一次单击锚点内的按钮时,锚点没有href,因此它什么也不做。它还执行printButton更新href锚点的方法。当您下次单击锚点内的按钮时,锚点有一个href集合,因此它会加载文件。它还再次执行按钮的单击侦听器,因此href得到更新。

要解决此问题,printButton()请在构造函数的末尾执行。

于 2020-11-06T06:52:51.453 回答
0

通过不使用 Anchor 而是使用 executeJavaScript 解决(虽然它已被贬低但工作正常):

UI.getCurrent().getPage().executeJavaScript("window.open(\"" + reportURL + "\", \"_blank\");");
于 2020-11-05T16:44:42.010 回答