Портлеты Liferay и WSRP: неправильные URL-адреса для потребителя WSRP
В настоящее время я проверяю Liferay и его функцию портлетов, особенно удаленных портлетов через WSRP.
У меня есть два экземпляра LifeRay, работающие на разных машинах в одной сети. Теперь я хочу поделиться портлетом из одного экземпляра liferay с другим, поэтому я установил приложение WSRP на обеих установках и настроил один из узлов как WSRP Producer, а другой - как WSRP Consumer. Мой WSRP Producer публикует портлет для расчетов валют (Währungsrechner на немецком языке), который включен в Liferay. На первый взгляд кажется, что этот портлет WSRP работает на стороне потребителя WSRP - я могу добавить его на страницу потребителя WSRP, и его содержимое (некоторые поля ввода) отображается правильно.
Но есть одна проблема:
HTML-форма, отображаемая портлетом, всегда отправляется в домен производителя WSRP, а не в домен потребителя WSRP, как я ожидал. Атрибут действия тега содержит неверное имя домена.
Я также написал небольшой портлет для целей отладки с использованием пользовательского интерфейса Liferay, который просто печатает выходные данные JSP-тега, устанавливает его в WSRP-производителе и встраивает его на страницу потребителя WSRP. URL-адреса, напечатанные этим простым портлетом отладки, всегда являются абсолютными URL-адресами и указывают на производителя WSRP, даже если портлет отображается на получателе WSRP. Я ожидаю, что URL-адреса либо относительны, либо указывают на правильный домен, например на потребительский домен WSRP, когда портлет отображается через страницу в экземпляре liferay потребителя WSRP.
Причина моей оценки Liferay состоит в том, что мы хотим проверить, является ли это подходящим решением для разработки портлетов и предоставления этих портлетов через WSRP для удаленного использования. Для дальнейшего исследования проблемы я создал небольшой отладочный портлет с Liferay SDK и Eclipe Plugin. Портлет в основном состоит из простой страницы JSP, которая выводит результат:
<% @ taglib uri = "http://liferay.com/tld/portlet" prefix = "liferay-portlet"%>
портлет:actionURL: span><портлет: actionURL /%>
Когда я устанавливаю этот портлет на lifery.mycompany.net и публикую его через производителя WSRP на liferay-2.mycompany.net, выходной URL-адрес будет следующим:
http://liferay.mycompany.net:8080/de_DE/widget/web/wsrp-achimstestproducer/portlets?p_auth=0iLgJP7e&p_p_id=sbdebug_WAR_sbliferaydemopluginportlet_INSTANCE_qs2S&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view
Обратите внимание, что доменом является liferay.mycompany.net вместо ожидаемого liferay-2.mycompany.net.
Как я могу это исправить? Нужно ли настраивать конфигурацию Liferay таким образом, чтобы потребитель WSRP заменял URL-адреса из портлетов WSRP своим собственным URL-адресом? Существуют ли другие факторы, влияющие на портлеты WSRP и action URL? Любая помощь по этому вопросу будет принята с благодарностью!
Моя установка: - Liferay 6.2 CE с Tomcat 7 - База данных MySQL 5.5 - Oracle Java 7 - Liferay был настроен с помощью встроенного мастера установки
Заранее спасибо!
2014-05-23: вот еще немного информации
Я также разместил этот вопрос с дополнительной информацией на форумах liferay:
-> установка для false-namespaced-parameters значения false в liferay-portlet.xml, похоже, решает проблему с доменом, но все же метод processAction портлета не выполняется, когда портлет используется через WSRP:(
Я что-то здесь не так делаю? Любые идеи и советы приветствуются!
1 ответ
После использования форума LifeRay, нескольких других ресурсов WSRP в Интернете, многие поисковые системы теперь работают.
Следующие три вещи, казалось, были основными причинами моих проблем с проблемами WSRP:
- require-namespaced-parameters должно явно быть установлено в false
Маркер CSRF должен быть деактивирован, я сделал это в portlet-xml через init-param:
<init-param> <name>check-auth-token</name> <value>false</value> </init-param>
Параметры рендеринга, по-видимому, недоступны в JSP представления, когда параметр рендеринга был создан в методе обработки событий, поэтому я переключился на атрибуты сеанса портлета для передачи данных из класса портлета в представление JSP.