识别portlet第一个渲染阶段

时间:2012-05-16 16:56:01

标签: liferay render portlet

如何知道渲染阶段是否是portlet的第一个渲染阶段?

我想在Liferay中显示我所有组织用户的列表,并能够通过在文本字段中写一个名称来过滤结果。

在文本字段中插入用户名时出现问题。我想在他/她的某些属性中搜索具有该名称的用户,并仅显示这些用户。我不知道为什么,所有用户都会再次显示,尽管我将生成的reasearch作为属性存储在actionRequest中:

actionRequest.setAttribute(“usersList”,users);

并尝试仅打印这些用户。此操作阶段之后的呈现阶段不会使我的属性仅呈现已创建的用户。

所以我的意图是以某种方式识别我的渲染阶段是否是第一个,或者它是否在动作阶段之后,以便我可以创建条件来打印所有用户或从存储在actionRequest中的我的列表中打印用户。的setAttribute。

非常感谢,希望你能提供帮助,顺便说一句,我继续自己研究。

3 个答案:

答案 0 :(得分:1)

让我详细说明请求的类型

1)动作请求:这些用于向服务器提供数据,如发布,提交表单,提交更多处理(数据存储)

2)渲染请求:他们绘制你的html部分,在这里你可以从数据库中检索数据,安排它,填充它并存储在请求属性中,从表示层获取并绘制它。

如果你想直接使用渲染请求,请创建一个渲染URL而不是动作URL,比方说,如果你有表单的提交按钮,那么你的html表单的action属性应该有“”,这将直接调用渲染方法,不会采取行动。

希望这有帮助。

- 菲利克斯

答案 1 :(得分:0)

尝试使用ActionResponse.setRenderParameter。 渲染参数将出现在渲染阶段,您可以使用RenderRequest类中的getParameter方法访问它们。

答案 2 :(得分:0)

我有坏消息,你不能将这样的参数从动作请求传递到渲染请求,因为动作请求只存在于动作阶段。因此,您无法从呈现阶段检索这些值。

将动作中的属性传递给渲染的唯一方法(据我所知)是使用

actionResponse.setRenderParameter("name", "value")

注意该值必须是字符串!所以你不能通过例如对象列表。

您的选择是

1)在渲染阶段进行实际搜索。 2)将结果放在会话中,因此它们也可以在渲染阶段使用。

如果选择选项1,只需完全忘记操作阶段,并将搜索表单发布到渲染阶段方法。这就是我在这些情况下经常做的事情。