java - Liferay - 公共(public)渲染参数被缓存/错误

标签 java liferay liferay-7

我有一个非常基本的要求。两个 portlet 位于一页上。第一个接收参数,进行一些计算并将新参数设置为公共(public)渲染参数。第二个 portlet 应该只显示该值。容易,对吧?所以我尝试这样做。这是第一个 portlet 的操作方法,它只接收一个参数并设置一个公共(public)渲染参数。

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

第二个 portlet 的呈现方法更加基本:

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

在第二个 portlet 的 view.jsp 中,我只是显示该“数字”。 现在,我生成一个将“someNumber”设置为 2 的操作 URL,以及将“someNumber”设置为 5 的第二个操作 URL。现在,我复制第一个 URL 并在新选项卡中将其打开。第二个 portlet 显示“number”的值 2,这是正确的。我复制第二个 url,并获取“number”的值 2,尽管它应该显示 5。如果我调试代码,我可以看到第一个 portlet 中的公共(public)呈现参数设置为 5,但第二个 portlet 仍然向我显示值 2。如果我以相反的方式执行此操作,那么先打开第二个 url,然后再打开另一个,我会在两个选项卡中得到值 5。以某种方式缓存该值。为什么? 两个 portlet 都有注释 javax.portlet.supported-public-render-parameter=number

最佳答案

我发现了这个问题。您必须在 portlet 类中设置以下属性。

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

如果将此设置为 true,则方法 copyRequestParameters 会将渲染参数设置回旧值。这可能是 Liferay 的错误。 顺便说一句,这个属性在 Liferay 6 中默认设置为 false。这就是为什么我在迁移到 Liferay 7 后注意到这个问题。

关于java - Liferay - 公共(public)渲染参数被缓存/错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60858182/

相关文章:

java - 这种聚合在 Kafka 流中如何工作?

java - 当autocommit=false并且没有提交或回滚时Oracle如何处理SQL?

java - aui validator 无法处理在 liferay 中提交的表单

gradle - 在settings.gradle中使用Maven存储库凭据

liferay - 在 Liferay 7 中,如何将用户角色配置为不继承 guest 权限?

java - 使用 Autowire 检索具有范围原型(prototype)的 bean

java - 即使在类路径中添加 commons-logging-1.1.1.jar 后,动态报告也不会编译,它会抛出异常

seo - Liferay 链接到布局结构

java - Liferay 页面重定向

java - 带有 MySQL Server 5.6 的 Liferay 7 无法启动