Как использовать веб-файлы в портлете Liferay

Я пытался включить shufflejs в портлет Liferay (6.2).

  1. Я добавил следующую зависимость в свой файл pom.xml:

    <dependency>
      <groupId>org.webjars.bower</groupId>
      <artifactId>shufflejs</artifactId>
      <version>4.0.0</version>
      <scope>compile</scope>
    </dependency>
    
  2. Я подтвердил, что на моем сервере tomcat присутствует webapps/my-portlet/WEB-INF/lib/shufflejs-4.0.0.jar и содержит в себе META-INF/resources/webjars/shufflejs/4.0.0/dist/shuffle.js
  3. Я включил следующую строку в свой файл liferay-portlet.xml:

    <header-portlet-javascript>
      /webjars/shufflejs/4.0.0/dist/shuffle.js
    </header-portlet-javascript>
    
  4. Когда я загружаю страницу своего портлета в своем браузере, я получаю все, кроме ошибки «404 Not Found» для http://localhost:20080/my-portlet/webjars/shufflejs/4.0.0/dist/shuffle.js?browserId=other&minifierType=js&languageId=en_US&b=6210&t=1465296591338

Что мне не хватает?

Спасибо


person Yoshiya    schedule 07.06.2016    source источник


Ответы (2)


Предполагая, что вы используете контейнер Servlet 3.0, у вас неправильный URL-адрес. Вам нужно использовать:

<header-portlet-javascript>
  /webjars/shufflejs/4.0.0/dist/shuffle.js
</header-portlet-javascript>

Согласно документации webjars:

Инструкции для сервлета 3

В любом контейнере, совместимом с Servlet 3, файлы WebJar, находящиеся в каталоге WEB-INF/lib, автоматически становятся доступными как статические ресурсы. Это работает, потому что все, что находится в каталоге META-INF/resources в JAR-файле в WEB-INF/lib, автоматически отображается как статический ресурс.

Обратите внимание: в этой документации указано, что вам следует использовать webjars/shufflejs/4.0.0/dist/shuffle.js, но небольшое экспериментирование с конфигурацией Liferay <header-portlet-javascript> приводит к необходимости предыдущего /, так как Liferay соединит этот URL-адрес с окончанием имени портлета, чтобы сформировать полный URL ресурса Liferay.

person Lucas    schedule 07.06.2016
comment
Я пробовал это раньше, и чтобы убедиться, я попробовал еще раз, и это не сработало. Прежде всего, liferay-portlet.xml любит документы, полученные из корневого каталога webapp, а также другие элементы (ссылки на webapp/resources/css/* и webapp/resources/js/* должны начинаться с /resource/...) - person Yoshiya; 07.06.2016
comment
Этот комментарий просто не соответствует действительности... Liferay не требует какой-либо структуры папок внутри вашего веб-приложения. Возможно, вы путаете это с соглашением JSF для /resources? Кроме того, webjars использует функцию сервлета 3.0, заключающуюся в том, что любой jar в его папке lib будет отображать все ресурсы, содержащиеся в его каталоге META-INF/resources. - person Lucas; 09.06.2016
comment
Ваша информация выше верна, но она не решила мою проблему, так как моя проблема не исчезла даже при следовании вашей информации выше. Я обновил свой вопрос и ответил на него ниже с информацией о первопричине моей проблемы. - person Yoshiya; 10.06.2016

Я нашел причину своих бед. Я развернул свой портлет и запустил портал в Eclipse с помощью JRebel. Когда я развертываю/запускаю автономный портлет без JRebel, этот ресурс обнаруживается. Более того, я могу затем отключить портал, а затем вернуть его в Eclipse/JRebel - теперь ресурс можно найти.

Я уже сталкивался с подобными проблемами при работе с Eclipse/JRebel (см. Liferay: выполнить действие, когда доступен -LocalServiceUtil). В целом Eclipse/JRebel прекрасны, но иногда при развертывании портлетов возникают небольшие затруднения.

person Yoshiya    schedule 10.06.2016