在方法processAction(ActionRequest request, ActionResponse response)
中,我将记录插入数据库并获取ID
然后
我想重定向到此记录的视图页面。所以我需要创建一个RenderURL
,其中包含该ID的参数值。
ActionResponse
未提供创建renderURL
的方法。 Liferay中的一些代码执行类似的操作:
renderURL
actionURL
renderURL
作为actionURL
但是,当时我不知道ID
的价值。
其他代码也直接使用new PortletURLImpl()
。我的portlet看不到那个类。
答案 0 :(得分:2)
其他代码也直接使用新的PortletURLImpl()。我的portlet看不到那个类。
因为此类在portal-impl.jar
中,所以不建议使用此jar中的类。从Liferay 6.1开始,如果类指向portal-impl.jar
,您将无法从plugins-sdk构建portlet。
现在回答你的问题:
任何jsp都是通过render
方法或doView
方法呈现的(如果使用liferay的MVCPortlet
),则此方法将作为portlet正常生命周期的一部分进行调用。 / p>
以下是您需要采取的步骤:
在你的`processAction'方法中设置一个render参数(使用response.setRenderParameter()方法),该方法可以在你的render方法中使用,如下所示:
actionResponse.setRenderParameter("myID", 1201);
仅供参考:使用setRenderParameter
后,您无法使用sendRedirect
方法
在获取任何其他请求参数时,在您的render方法中获取此"myID"
:
//assuming your ID is a long
long myUserName = ParamUtil.getLong(renderRequest, "myID");
或
String strMyID = renderRequest.getParameter("myID");
long myID = Long.parseLong(strMyID);
在此之后,只需使用
include(renderPage, renderRequest, renderResponse);
renderPage
只是一个字符串,其中包含docroot
{j}中jsp的路径,如/html/yourportlet/view.jsp
正如事后的想法:
如果您使用的是Liferay IDE,那么您可以尝试使用MVCPortlet
创建一个简单的portlet项目,然后查看生成的portlet.xml
的{{1}}
所以基本上你需要将信息从动作阶段传递到渲染阶段,development guide是一个很好地解释这一点的好地方。
就是这样。
希望这会有所帮助。
如果您对此有任何疑惑,请告诉我。
答案 1 :(得分:2)
在行动阶段,请执行以下操作:
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()));
您肯定可以根据需要添加或复制参数。
答案 2 :(得分:0)
您可以包含视图页面include(viewTemplate,actionRequest,actionResponse),而不是创建renderURL。或者如果你想在doView中发送任何想要的任何参数,那么使用actionResponse.setParameter(name,value)方法
答案 3 :(得分:-1)
我使用占位符作为参数值创建RenderURL
,如下所示:
<portlet:renderURL var="redirect">
<portlet:param name="ID" value="__ID__" />
</portlet:renderURL>`
在processAction
:
String redirect = redirectParam.replace("__ID__", "123213");
actionResponse.sendRedirect(redirect) ;