У меня очень базовое 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