2. Работа с компонентами WebDav

На данном этапе разработки в приложении реализована система управления базой знаний, представленная экраном Knowledge base.

В этой главе вы:

  • Улучшите таблицу оболочек документов webDav, чтобы отображать ссылку на документ WebDAV вместо идентификатора документа.

  • Воспользуетесь компонентом webdavDocumentUpload на экране деталей оболочки документа webDav, чтобы загружать документ WebDAV в систему.

Добавление WebdavDocumentUploadField на экран

Найдите webdav-document-wrapper-detail-view.xml в окне инструмента Jmix и дважды щелкните на нем. Откроется дизайнер экрана:

wdw detail view

Обратите внимание, что для отображения атрибута webdavDocument используется компонент entityPicker. Если вы хотите отобразить специальный компонент, предназначенный для работы с документами, добавьте UI-компонент WebdavDocumentUploadField в XML-дескриптор.

Удалите описание компонента entityPicker из XML-дескриптора и поместите курсор после departmentField. Затем нажмите Add Component на панели действий, найдите элемент WebdavDocumentUploadField и дважды щелкните на нем.

add wd upload field

Новый элемент webdavDocumentUpload будет добавлен под элементом formLayout как на панели структуры Jmix UI, так и в XML. Настройте атрибуты id, colspan и property, как показано ниже.

<formLayout id="form" dataContainer="webdavDocumentWrapperDc">
    <textField id="descriptionField" property="description"
               colspan="2"/>
    <entityPicker id="departmentField" property="department"
                  colspan="2">
        <actions>
            <action id="entityLookup" type="entity_lookup"/>
            <action id="entityClear" type="entity_clear"/>
        </actions>
    </entityPicker>
    <webdav:webdavDocumentUpload id="webdavDocumentField"
                                 property="webdavDocument"
                                 colspan="2"/>
</formLayout>

Отобразим в таблице данных ссылку на документ вместо его идентификатора.

Откройте webdav-document-wrapper-list-view.xml и найдите webdavDocumentWrappersDataGrid.

Выберите колонку webdavDocument, перейдите на вкладку Handlers инспектора компонента и создайте метод-обработчик renderer:

@Supply(to = "webdavDocumentWrappersDataGrid.webdavDocument", subject = "renderer")
private Renderer<WebdavDocumentWrapper> webdavDocumentWrappersDataGridWebdavDocumentRenderer() {
    return null;
}

Инжектируйте объект UiComponents в класс контроллера:

@Autowired
private UiComponents uiComponents;
Вы можете использовать кнопку Inject на верхней панели действий редактора, чтобы инжектировать зависимости в контроллеры экранов и Spring-бины.

Реализуйте метод webdavDocumentWrappersDataGridWebdavDocumentRenderer:

@Supply(to = "webdavDocumentWrappersDataGrid.webdavDocument", subject = "renderer")
private Renderer<WebdavDocumentWrapper> webdavDocumentWrappersDataGridWebdavDocumentRenderer() {
    return new ComponentRenderer<>( (1)
            () -> uiComponents.create(WebdavDocumentLink.class), (2)
            (link, wrapper) -> {
                WebdavDocument webdavDocument = wrapper.getWebdavDocument();
                if (webdavDocument != null) {
                    link.setWebdavDocument(webdavDocument);
                }
            });
}
1 Метод возвращает объект Renderer, создающий UI-компонент для отображения в колонке.
2 Экземпляр компонента WebdavDocumentLink создается с помощью фабрики UiComponents.

Запуск приложения

Запустим приложение, чтобы увидеть новую функциональность в действии.

Перейдите по адресу http://localhost:8080 в веб-браузере и войдите в приложение с учетными данными admin/admin.

Выберите пункт Knowledge base в меню Application. Откроется экран Webdav document wrappers.list.

wd wrapper list

Колонка Webdav document содержит ссылку на документ WebDav и кнопку, позволяющую открыть стандартный экран WebDAV document versions.

Нажмите Create. Откроется экран Webdav document wrappers.detail. Помимо текстового поля, используемого для описания файла, и пикера для отдела, вы увидите встроенный компонент дополнения WebDAV для загрузки файлов. Попробуйте загрузить файл с помощью этого компонента:

wd wrapper detail

После нажатия кнопки OK вы будете перенаправлены на экран списка.

Наведите курсор мыши на имя документа WebDAV. В левом нижнем углу вы увидите ссылку на место расположения документа на сервере WebDAV.

wd wrapper list try open doc

Однако при попытке открыть документ браузер отобразит сообщение о том, что не удалось установить соединение с сайтом.

Это происходит из-за того, что необходимые настройки еще не выполнены. Мы рассмотрим это в следующем разделе.

Итоги

В этом разделе вы узнали, как использовать компоненты, предоставляемые дополнением WebDAV.

Вы узнали, что:

  • Компонент WebDAVDocumentUploadField включает удобные встроенные инструменты для просмотра и загрузки документов WebDAV.

  • Вы можете использовать компонент WebDavDocumentLink в таблице данных, указав ComponentRenderer для колонки.