在 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 request
和 RenderResponse 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.PortletRequest
的 javax.portlet.RenderRequest
类型。 getAttribute(String)
方法 returns 和 Object
但您可以将其转换为您在 portlet 的呈现方法中附加的对象的类型。
有关 <portlet:defineObjects />
标签的信息,请参阅 https://blogs.oracle.com/deepakg/entry/jsr286_defineobjects_tag
我有一个 portlet,我需要在 portlet 呈现之前调用 Web 服务,并将此调用的结果放在 *jsp.
中的一个字段中我尝试重写 portlet class 中的 "render" 和 "doView" 方法并调用网络服务...好的,这行得通,但我无法输入结果在 *jsp 中,因为该方法没有 "ActionResponse" 来执行此操作。 如何在 *jsp?
中传递调用结果谢谢。
要将 Web 服务调用的结果传递给 JSP,您可以将结果作为请求属性添加到请求中。在 JSP 中使用 <portlet:defineObjects />
标记使请求对象在页面上可用。然后检索您添加到请求中的对象。例如,您可以在您的 portlet 的呈现方法中使用以下内容(假设您的 portlet 的呈现方法采用 RenderRequest request
和 RenderResponse 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.PortletRequest
的 javax.portlet.RenderRequest
类型。 getAttribute(String)
方法 returns 和 Object
但您可以将其转换为您在 portlet 的呈现方法中附加的对象的类型。
有关 <portlet:defineObjects />
标签的信息,请参阅 https://blogs.oracle.com/deepakg/entry/jsr286_defineobjects_tag