Vaadin 14 Открыть новый компонент в новой вкладке браузера - PullRequest
1 голос
/ 11 марта 2020

Есть ли способ открыть PDF-файл, встроенный в компонент, и отправить его на новую вкладку браузера?

Идея состоит в том, чтобы установить ресурс для этого компонента и открыть его на новой вкладке. Позже мне понадобится больше кнопок для навигации между различными документами.

enter image description here

public class EmbeddedPdfDocument extends Component implements HasSize {

    public EmbeddedPdfDocument(StreamResource resource) {
        this();
        getElement().setAttribute("data", resource);
    }

    public EmbeddedPdfDocument(String url) {
        this();
        getElement().setAttribute("data", url);
    }

    protected EmbeddedPdfDocument() {
        getElement().setAttribute("type", "application/pdf");
        setSizeFull();
    }
}

1 Ответ

1 голос
/ 11 марта 2020

В этой теме на форуме Vaadin.com обсуждается ваша проблема.

Anchor::setTarget"_blank"

Используйте Anchor виджет для вашей ссылки. См. демонстрационная страница .

➥ Ключ должен установить «target» для строки _blank.

String url = "…" ;
Anchor anchor = new Anchor( url , "Open a PDF document" ) ;
anchor.setTarget( "_blank" ) ;  // Specify `_blank` to open in a new browser tab/window.

Вот полный пример приложения в Vaadin 14.1.19 на основе стартового проекта сорта Plain Java Servlet.

Запустите этот пример приложения. Нажмите на ссылку, чтобы открыть другую вкладку веб-браузера и отобразить документ PDF.

package work.basil.example;

import com.vaadin.flow.component.Key;
import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.button.ButtonVariant;
import com.vaadin.flow.component.dependency.CssImport;
import com.vaadin.flow.component.html.Anchor;
import com.vaadin.flow.component.html.H1;
import com.vaadin.flow.component.notification.Notification;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.component.textfield.TextField;
import com.vaadin.flow.router.Route;
import com.vaadin.flow.server.PWA;

/**
 * The main view contains a button and a click listener.
 */
@Route ( "" )
// @PWA ( name = "Project Base for Vaadin", shortName = "Project Base" )
@CssImport ( "./styles/shared-styles.css" )
@CssImport ( value = "./styles/vaadin-text-field-styles.css", themeFor = "vaadin-text-field" )
public class MainView extends VerticalLayout
{

    public MainView ( )
    {
        // Widgets
        H1 heading = new H1( "Download PDF in browser tab" );

        String url = "https://www.fda.gov/media/76797/download";
        Anchor anchor = new Anchor( url , "Open a PDF document" );
        anchor.setTarget( "_blank" );  // Specify `_blank` to open in a new browser tab/window.

        // Arrange
        this.add( heading , anchor );
    }
}
...