Пользовательский плагин ZK CKEditor с пружинной загрузкой - PullRequest
0 голосов
/ 29 ноября 2018

Я перемещаю ZK стандартное Spring приложение в Spring Boot .

У меня проблема с CKEditor конфигурация.Я использую внешние плагины, ниже приведена конфигурация:

CKEDITOR.plugins.addExternal('wordcount', 'plugins/wordcount/', 'plugin.js');
CKEDITOR.plugins.addExternal('notification', 'plugins/notification/', 'plugin.js');

CKEDITOR.editorConfig = function (config) {
    config.extraPlugins = 'wordcount,notification';
    config.mytoolbar = [ ... ]
    config.wordcount = { ... };
};

Со старым стандартным приложением Spring , я настроил его так:

1 - плагины ( wordcount и уведомления папки), помещенные в src / webapp / zkpatch / js / ckez / ext / CKeditor / plugins

2 - файл конфигурации ckeditor ( config.js ) помещен в src / webapp / js

3 - В zk.xml :

<library-property>
    <name>org.zkoss.web.util.resource.dir</name>
    <value>/zkpatch</value>
</library-property>

4 - в файле ZUL:

<ckeditor customConfigurationsPath="/js/config-ckeditor.js" value="@load(vm.myvalue)"/>

Это сработало отлично.


При Spring Boot расположение ресурсов изменилось, поэтому я использую следующее:

1 - плагины ( wordcount * 1059)* и уведомления папки), помещенные в src / resources / web / zul / js / ckez / ext / CKeditor / plugins

2 -Файл конфигурации ckeditor ( config.js ) помещается в src / resources / static / js

3 - в файле ZUL:

<ckeditor customConfigurationsPath="/js/config-ckeditor.js" value="@load(vm.myvalue)"/>

Но я получаю следующую ошибку (всплывающее окно ZK) при достижении страницы:

/ js / ckez / ext / CKeditor / plugins/wordcount/plugin.js не найден

По исходному тексту страницы видно, что файл плагина JavaScript загружен правильно, в консоли браузера также есть ошибка TypeError: k is null.

Куда мне нужно переместить пользовательские папки плагинов, чтобы они были найдены Spring Boot?


РЕДАКТИРОВАТЬ 1

Я пропустил некоторые из нихпути выше, я, конечно, использую src/main/resources, а не src/resources, а папки плагинов CKEditor помещены в src/resources/web/js/ckez/ext/CKeditor/plugins (не в папку zul).

Я забыл упомянуть, что мыиспользование инициализатора пользовательских приложений для поддержки пользовательских областей (один из моих коллег открыл проблему здесь https://github.com/zkoss/zkspringboot/issues/7).

Мы используем Java 11 , ZK 8.6.0 и zkspringboot 1.0.3 стартер с Spring boot 2.0.5.RELEASE (я пробовал последний 2.1.0, но, похоже, это такпока не совместим с вашим стартером, кстати было бы неплохо иметь возможность использовать 2.1.0 release для производства, так как он официально поддерживает Java 11).


EDIT2

Undertow настроен с HTTPS и HTTP / 2 .

При непосредственном обращении к приложению (https://locahost:8443/myapp)У меня действительно нет никаких проблем, CKEditor загружается нормально.

Я только что заметил, что проблема возникает, когда я использую передний Apache сервер с AJP (https://locahost/myapp),, то CKEditor не может загрузить с вышеуказанным сообщением об ошибке.На вкладке сети браузера я вижу, что я также получаю код 403 для некоторых статических ресурсов (настраиваемый js / css).

Конфигурация Apache очень проста:

ProxyPass "/myapp" "ajp://localhost:8009/myapp"
ProxyPassReverse "/myapp" "ajp://localhost:8009/myapp"

Конфигурация Undertow тоже:

@Configuration
public class UndertowEmbeddedAjpConfiguration {

    public UndertowEmbeddedAjpConfiguration() { }

    @Bean
    public UndertowServletWebServerFactory undertowServletWebServerFactory() {
        final UndertowServletWebServerFactory undertow = new UndertowServletWebServerFactory();
        undertow.addBuilderCustomizers((UndertowBuilderCustomizer) builder -> {
            builder.addAjpListener(8009, "localhost");
        });
        return undertow;
    }
}

Я знаю, что AJP вышел из моды, к сожалению, это требование для нас, так как мы вынуждены использовать Shibboleth SSO для всех наших приложений, для которых требуется AJP ...

При необходимости я могу предоставить готовую версию Docker.

РЕДАКТИРОВАТЬ 3

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

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Я до сих пор не понимаю, что происходит на вашей стороне.Вот скриншот папок и файлов, которые работают на моей стороне.Показаны 2 альтернативы, используя статическую папку Spring Boot или папку веб-ресурса класса ZK.

project files/folders

Оба подхода выбирают свою соответствующую конфигурацию с 20 или 30 максимальными словами(просто для проверки некоторых параметров конфигурации), вы также можете увидеть, какие сетевые запросы выполняются и что они выполняются успешно, если файлы находятся в ожидаемых папках.

browser output

Я основал свой тест на примере zkspringboot-demo-jar

Другой совет: Я выпустил zkspringboot-starter 1.0.4 всего 5 дней назад, он используетпружинный башмак 2.1.0.В любом случае -стартер предназначен для быстрого запуска, это не значит, что вы застряли с ним.Зависимость zkspringboot-autoconfig позволяет вам использовать свою собственную родительскую версию springboot-starter-web (или зависимость) и просто добавить конфигурацию, специфичную для ZK, сверху - это все-таки maven со всей своей гибкостью (и болью).Это в основном ортогонально к Springboot.Это больше похоже на запуск одного и того же приложения ZK на tomcat 7/8 / 8.5 или 9 или jetty - контейнер может измениться, но конфигурация, будь то web.xml или весенняя конфигурация java, остается прежней.

0 голосов
/ 03 декабря 2018

Это будет сложно распутать, но я попробую.

Дополнительная папка, настроенная с помощью "org.zkoss.web.util.resource.dir", никогда не требовалась.И действительно просто полезен для исправлений, поскольку вы можете настроить только один из них.

Старое / оригинальное место для размещения ресурсов находится в папке пакета src/main/resources/web (или, как вы, вероятно, используете не по умолчанию src/resources/web) - Это то, что вы увидите, глядя на любой из банок ZK ... этот механизм всегда был доступен любому.

Так что в приложении Spring Boot нет ничего нового, разница в том, что WEBПапка -INF недоступна при сборке весеннего загрузочного приложения в виде jar-файла.

Я предполагаю, что это просто опечатка в вашей конфигурации:

1 - плагины (wordcount и уведомленияпапки), помещенные в src / resources / web / zul / js / ckez / ext / CKeditor / plugins

ckeditor будет искать плагины в папке classpath web/js/ckez/ext/CKeditor/plugins no zul между нимиследуйте той же структуре, что и в ckez.jar

Это должно исправить ошибку /js/ckez/ext/CKeditor/plugins/wordcount/plugin.js not found.

Может быть, это уже все, что вам нужно.

Для дополнительной устранения неполадок I 'буду предлагатьхорошо в инструменты разработчика браузеров - вкладка Сеть.Это даст вам лучшую (чем просто источник страницы) информацию о том, какой путь используется для загрузки файлов и как сервер отвечает.

...