在 portlet 呈现之前调用网络服务。生命之光

Call web-service before portlet render. Liferay

我有一个 portlet,我需要在 portlet 呈现之前调用 Web 服务,并将此调用的结果放在 *jsp.

中的一个字段中

我尝试重写 portlet class 中的 "render" 和 "doView" 方法并调用网络服务...好的,这行得通,但我无法输入结果在 *jsp 中,因为该方法没有 "ActionResponse" 来执行此操作。 如何在 *jsp?

中传递调用结果

谢谢。

要将 Web 服务调用的结果传递给 JSP,您可以将结果作为请求属性添加到请求中。在 JSP 中使用 <portlet:defineObjects /> 标记使请求对象在页面上可用。然后检索您添加到请求中的对象。例如,您可以在您的 portlet 的呈现方法中使用以下内容(假设您的 portlet 的呈现方法采用 RenderRequest requestRenderResponse response 参数):

request.setAttribute("myWebServiceResult", myWebServiceResult);

然后将以下内容添加到 JSP 的顶部:

<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>

<portlet:defineObjects />

然后您可以像这样检索请求属性:

Object myWebServiceResult = renderRequest.getAttribute("myWebServiceResult");

<portlet:defineObjects /> 标签提供的 renderRequest 变量是扩展 javax.portlet.PortletRequestjavax.portlet.RenderRequest 类型。 getAttribute(String) 方法 returns 和 Object 但您可以将其转换为您在 portlet 的呈现方法中附加的对象的类型。

有关 <portlet:defineObjects /> 标签的信息,请参阅 https://blogs.oracle.com/deepakg/entry/jsr286_defineobjects_tag