我试图仅通过名为view.jsp
的JSP文件在liferay中创建portlet。我需要的是:
view.jsp
。 怎么做?
最佳答案
您是否已使用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 View 的方法。此方法应命名为
doView()
,并具有两个参数:RenderRequest
和RendertResponse
。此外,它还会引发一些异常,并将portlet呈现委托(delegate)给父类(super class)方法: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);
这是我们的类(class),很完整:
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>
这是我的机器中此代码的结果:
关于jsp - 创建Liferay Portlet-如何将数据从Java类传递到view.jsp?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6894095/