Liferay 如何在portlet的操作阶段创建RenderURL?
在方法Liferay 如何在portlet的操作阶段创建RenderURL?,liferay,portlet,liferay-6,Liferay,Portlet,Liferay 6,在方法processAction(ActionRequest请求,ActionResponse响应)中,我将一条记录插入数据库并获取ID,然后 我想重定向到此记录的查看页面。因此,我需要创建一个带有该ID参数值的RenderURL ActionResponse不提供创建renderURL的方法。Liferay中的某些代码执行类似的操作,如: 在访问actionURL 将renderURL作为actionURL中的参数传递 但是,当时我不知道ID的值 其他代码也直接使用new PortletURL
processAction(ActionRequest请求,ActionResponse响应)
中,我将一条记录插入数据库并获取ID
,然后
我想重定向到此记录的查看页面。因此,我需要创建一个带有该ID参数值的RenderURL
ActionResponse
不提供创建renderURL
的方法。Liferay中的某些代码执行类似的操作,如:
actionURL
renderURL
作为actionURL中的参数传递
ID
的值
其他代码也直接使用
new PortletURLImpl()
。我的portlet无法看到该类。您可以包含视图页面include(viewTemplate、actionRequest、actionResponse),而不是创建renderURL。或者,如果您想发送任何参数以在doView中获取它,则使用actionResponse.setParameter(名称、值)方法
其他代码也直接使用新的PortletURLImpl()。我的portlet无法看到该类
因为这个类在门户impl.jar中,而且不建议使用这个jar中的类。从Liferay 6.1开始,如果类指向portal impl.jar
,则无法从插件sdk构建portlet
现在回答你的问题:
任何jsp都是通过render
方法或方法(如果使用liferay)呈现的,该方法将作为Portlet正常生命周期的一部分被调用
以下是您需要采取的步骤:
actionResponse.setRenderParameter("myID", 1201);
仅供参考:使用setRenderParameter
后,您不能使用该方法“myID”
:
//assuming your ID is a long
long myUserName = ParamUtil.getLong(renderRequest, "myID");
或
include(renderPage, renderRequest, renderResponse);
WARErenderPage
只不过是一个字符串,包含docroot
中jsp的路径,如/html/yourportlet/view.jsp
事后想一想:如果您使用的是Liferay IDE,那么您可以尝试使用
MVCPortlet
创建一个简单的portlet项目,然后查看生成的portlet.xml
的
希望这有帮助
如果您对此有任何疑问,请告诉我。我创建了一个带有占位符作为参数值的
RenderURL
,如下所示:
<portlet:renderURL var="redirect">
<portlet:param name="ID" value="__ID__" />
</portlet:renderURL>`
在行动阶段,请执行以下操作:
ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute (WebKeys.THEME_DISPLAY);
PortletURL url = PortletURLFactoryUtil.create(request, this.getPortletName(), themeDisplay.getPlid(), PortletRequest.RENDER_PHASE);
response.sendRedirect("/c/portal/login?redirect=" + HttpUtil.encodeURL(url.toString()));
例如,如果要重定向到登录页面并返回,可以执行以下操作:
ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute (WebKeys.THEME_DISPLAY);
PortletURL url = PortletURLFactoryUtil.create(request, this.getPortletName(), themeDisplay.getPlid(), PortletRequest.RENDER_PHASE);
response.sendRedirect("/c/portal/login?redirect=" + HttpUtil.encodeURL(url.toString()));
当然,您可以根据需要添加或复制参数。对不起,我没有说清楚。我想要
renderURL
作为重定向URL。如果您不重定向,当您刷新或按地址栏中的enter键时,您将得到错误的页面结果。谢谢您,Prakash。我试过你的方法。actionURL之后,您无法刷新或按地址栏中的enter键。顺便说一句,在某些情况下,PortalUtil.copyRequestParameters
将非常有用。