您是否使用 Liferay 的 create.sh 脚本创建了您的 portlet?在这种情况下,我们需要创建一个扩展 MVCPortlet 的新 portlet 类:
public class ArrayPortlet extends MVCPortlet {
}
此外,您必须更改WEB-INF/portlet.xml 文件以指向其类。将下面的行替换为
<portlet-class>com.liferay.util.bridges.mvc.MVCPortlet</portlet-class>
通过命名您的 portlet 类:
<portlet-class>br.com.seatecnologia.arrayportlet.ArrayPortlet</portlet-class>
这只是设置。现在,最酷的部分:代码!您应该创建一个方法来处理 portlet 的视图。此方法应命名为doView(),并有两个参数:RenderRequest 和RendertResponse。此外,它会引发一些异常并将 portlet 呈现委托给超类方法:
public void doView(RenderRequest renderRequest, RenderResponse renderResponse)
throws IOException, PortletException {
super.doView(renderRequest, renderResponse);
}
然而,在呈现 portlet 之前,我们创建了我们的数组:
String[] array = new String[] { "foo", "bar", "baz" };
并将其放入作为参数接收的RenderRequest。您应该为参数命名 - 在这种情况下,名称是 "my-array":
renderRequest.setAttribute("my-array", array);
这是我们的课程,完成:
public class ArrayPortlet extends MVCPortlet {
@Override
public void doView(RenderRequest renderRequest, RenderResponse renderResponse)
throws IOException, PortletException {
String[] array = new String[] { "foo", "bar", "baz" };
renderRequest.setAttribute("my-array", array);
super.doView(renderRequest, renderResponse);
}
}
我们通过RenderRequest 对象将值传递给JSP。现在,在 JSP 中,我们应该“导入”RenderRequest 实例(以及其他对象),将 <portlet:defineObjects /> 标记添加到 JSP 的开头。在此之后,我们可以通过其名称从renderRequest 对象中获取任何属性。请注意,getAttribute() 方法返回 Object,因此您应该将其返回值转换为正确的类型:
<portlet:defineObjects />
<%
String[] anArrayFromMyPortlet = (String[])renderRequest.getAttribute("my-array");
%>
现在,您可以随意使用检索到的对象:
<ul>
<% for (String string : anArrayFromMyPortlet) { %>
<li><%= string %></li>
<% } %>
</ul>
这是我机器上这段代码的结果: