Liferay - publi c параметр рендеринга кэширован / неверен - PullRequest
0 голосов
/ 26 марта 2020

У меня очень базовое c требование. Два портлета находятся на одной странице. Первый получает параметр, выполняет некоторые вычисления и устанавливает новый параметр как параметр вывода publi c. Второй портлет должен просто отображать это значение. Легко, правда? Я попытался это сделать. Вот метод действия первого портлета, который просто получает параметр и устанавливает параметр вывода publi c.

public void testAction(ActionRequest actionRequest, ActionResponse actionResponse) throws IOException, PortletException {
   long someNumber = ParamUtil.getLong(actionRequest, "someNumber");
   actionResponse.setRenderParameter("number", someNumber + "");
}

Метод вывода второго портлета еще более базовый c:

public void doView(RenderRequest renderRequest, RenderResponse renderResponse) throws IOException, PortletException {
    long number = ParamUtil.getLong(renderRequest, "number");
    renderRequest.setAttribute("number", number);
    super.doView(renderRequest, renderResponse);
}

В представлении. jsp этого второго портлета, я просто отображаю это «число». Теперь я генерирую URL-адрес действия с параметром someNumber, равным 2, и вторым, с параметром someNumber равным 5. Теперь я копирую первый URL-адрес и открываю его в новой вкладке. Второй портлет показывает мне значение 2 для числа, что является правильным. Я копирую второй URL, а также получаю значение 2 для «числа», хотя оно должно отображать 5. Если я отлаживаю код, я вижу, что для параметра вывода publi c в первом портлете задано значение 5, но все же второе Портлет показывает мне значение 2. Если я делаю это наоборот, поэтому сначала открывая второй URL, а затем другой, я получаю значение 5 на обеих вкладках. Каким-то образом значение кэшируется. Почему? Оба портлета имеют аннотацию javax.portlet.supported-public-render-parameter=number

1 Ответ

0 голосов
/ 26 марта 2020

Я нашел проблему. Вы должны установить следующее свойство в своем классе портлета.

"javax.portlet.init-param.copy-request-parameters=false"

Если для этого параметра установлено значение true, метод copyRequestParameters вернет параметры рендеринга к старым значениям. Это может быть ошибка Liferay. Кстати, это свойство было установлено на false по умолчанию в Liferay 6. Именно поэтому я заметил эту проблему с момента перехода на Liferay 7.

...