3.5.2.1.14. Embedded (Deprecated)

Начиная с версии 6.8 платформы, компонент Embedded объявлен устаревшим (Deprecated). Используйте компонент Image для отображения графического содержимого и компонент BrowserFrame для встраивания веб-страниц.

Компонент Embedded предназначен для вывода изображений и встраивания в экран произвольных веб-страниц.

XML-имя компонента: embedded

Рассмотрим пример использования компонента для вывода изображения из файла, сохраненного в FileStorage.

  • Объявляем компонент в XML-дескрипторе экрана:

    <groupBox caption="Embedded" spacing="true"
              height="250px" width="250px" expand="embedded">
        <embedded id="embedded" width="100%"
                  align="MIDDLE_CENTER"/>
    </groupBox>
  • В контроллере экрана инжектируем компонент и интерфейс FileStorageService. Затем в методе init() получаем из параметров экрана переданный из вызывающего кода FileDescriptor, загружаем соответствующий файл в байтовый массив, создаем для него ByteArrayInputStream и передаем в метод setSource() компонента:

    @Inject
    private Embedded embedded;
    @Inject
    private FileStorageService fileStorageService;
    
    @Override
    public void init(Map<String, Object> params) {
        FileDescriptor imageFile = (FileDescriptor) params.get("imageFile");
        byte[] bytes = null;
        if (imageFile != null) {
            try {
                bytes = fileStorageService.loadFile(imageFile);
            } catch (FileStorageException e) {
                showNotification("Unable to load image file", NotificationType.HUMANIZED);
            }
        }
        if (bytes != null) {
            embedded.setSource(imageFile.getName(), new ByteArrayInputStream(bytes));
            embedded.setType(Embedded.Type.IMAGE);
        } else {
            embedded.setVisible(false);
        }
    }

Компонент Embedded может отображать содержимое различных типов, которые по-разному отрисовываются в HTML. Тип содержимого можно задать методом setType(). Поддерживаются следующие типы:

  • OBJECT - позволяет встраивать файлы некоторых типов в элементы HTML <object> и <embed>.

  • IMAGE - встраивает изображения в HTML-элемент <img>.

  • BROWSER - встраивает контейнер для отображения других независимых документов внутри элемента HTML <iframe>.

В веб-клиенте компонент позволяет отображать файлы, находящиеся внутри каталога VAADIN. Например:

<embedded id="embedded"
          relativeSrc="VAADIN/themes/halo/my-logo.png"/>

или

embedded.setRelativeSource("VAADIN/themes/halo/my-logo.png")

Кроме того, можно определить каталог ресурсных файлов в свойстве приложения cuba.web.resourcesRoot, и указать для компонента Embedded имя файла внутри этого каталога с префиксом значения атрибута: file:// , url:// или theme://:

<embedded id="embedded"
          src="file://my-logo.png"/>

или

embedded.setSource("theme://branding/app-icon-menu.png");

Для встраивания в экран веб-клиента внешней веб-страницы необходимо передать компоненту URL:

try {
    embedded.setSource(new URL("http://www.cuba-platform.com"));
} catch (MalformedURLException e) {
    throw new RuntimeException(e);
}