java - Liferay - 公共渲染参数被缓存/错误
问题描述
我有一个非常基本的要求。两个 portlet 在一个页面上。第一个接收一个参数,进行一些计算并将一个新参数设置为公共渲染参数。第二个 portlet 应该只显示这个值。容易,对吧?所以我试着这样做。这是第一个 portlet 的操作方法,它只接收一个参数并设置一个公共渲染参数。
public void testAction(ActionRequest actionRequest, ActionResponse actionResponse) throws IOException, PortletException {
long someNumber = ParamUtil.getLong(actionRequest, "someNumber");
actionResponse.setRenderParameter("number", someNumber + "");
}
第二个 portlet 的 render 方法更加基础:
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 并在新选项卡中打开它。第二个 portlet 向我显示了 'number' 的值 2,这是正确的。我复制了第二个 url 并得到了 'number' 的值 2,虽然它应该显示 5。如果我调试代码,我可以看到第一个 portlet 中的公共渲染参数设置为 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 错误。顺便说一句,这个属性false
在 Liferay 6 中默认设置为。这就是我在迁移到 Liferay 7 后注意到这个问题的原因。
推荐阅读
- ansible - Creating a comma separated string from a dictionary in Ansible
- java - Using GraalVM to run Java on Heroku
- angular - Ionic background Image not Showing?
- javascript - 在 vue 数据中移动数组中的元素不会触发计算元素的重新计算
- spring-boot - 使用 rpc 连接到 cordapp 时出现错误 404
- c# - Azure Blob 上传在 ASP .Net Core 应用程序中不起作用
- javascript - Disabling caching in a built SPA
- c# - 使用多个键和一个值时最好的结构是什么?
- javascript - 从具有相同类名的多个表格单元格中读取文本
- python - 使用 TensorFlow 进行在线学习