创建liferay portlet-如何从Java类将数据传递到view.jsp?
我正在尝试在liferay中创建portlet,只需从名为创建liferay portlet-如何从Java类将数据传递到view.jsp?,jsp,liferay,portlet,Jsp,Liferay,Portlet,我正在尝试在liferay中创建portlet,只需从名为view.JSP的JSP文件创建portlet。我需要的是: 加载portlet时,我想调用自定义Java类,在其中生成一个数组 我需要将该数组传递给view.jsp 如何做到这一点?您的问题很模糊,我建议您对portlet开发进行一些介绍,因为这似乎是关于对基础架构/规范的基本理解 试图通过给出一些提示来回答您的问题-如果这些提示太模糊,请道歉: init()是portlet生命周期的一部分,在加载portlet类时将被调用一次 您可
view.JSP的JSP文件创建portlet。我需要的是:
加载portlet时,我想调用自定义Java类,在其中生成一个数组
我需要将该数组传递给view.jsp
如何做到这一点?您的问题很模糊,我建议您对portlet开发进行一些介绍,因为这似乎是关于对基础架构/规范的基本理解
试图通过给出一些提示来回答您的问题-如果这些提示太模糊,请道歉:
- init()是portlet生命周期的一部分,在加载portlet类时将被调用一次李>
- 您可以通过(例如)在doView()中将请求属性添加到RenderRequest来将值传递给视图
当然,这取决于您使用的portlet框架-上面提到的方法来自底层portlet规范(即JSR-286)您是否使用Liferay的create.sh
脚本创建了portlet?在这种情况下,我们需要创建一个新的portlet类,该类扩展了MVCPortlet
:
public class ArrayPortlet extends MVCPortlet {
}
此外,还必须将WEB-INF/portlet.xml
文件更改为指向其类。将下面的行替换为
<portlet-class>com.liferay.util.bridges.mvc.MVCPortlet</portlet-class>
但是,在呈现portlet之前,我们要创建数组:
String[] array = new String[] { "foo", "bar", "baz" };
并将其放入作为参数接收的渲染请求中。您应该为参数指定一个名称-在本例中,名称为“my 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
实例(以及其他对象),将
标记添加到JSP的开头。在此之后,我们可以通过对象名从renderRequest
对象中获取任何属性。请注意,方法getAttribute()
返回Object
,因此您应该将其返回值强制转换为正确的类型:
<portlet:defineObjects />
<%
String[] anArrayFromMyPortlet = (String[])renderRequest.getAttribute("my-array");
%>
现在,您只需按照自己的意愿使用检索到的对象:
<ul>
<% for (String string : anArrayFromMyPortlet) { %>
<li><%= string %></li>
<% } %>
</ul>
这是我的机器中此代码的结果:
您可以通过以下几种方式实现:
1) 您可以使用renderRequest.setAttribute(“我的数组”,数组)代码>
2) 您可以将数据放入会话中
request.getPortletSession().setAttribute(“我的数组”,数组)代码>
在第二种情况下,当您不再需要元素时,请不要忘记将其从会话中删除。只是澄清一下,您是指view.jsp吗?在呈现页面后是否需要该值?如果是,为什么?是的,我是说jsp。我想解析远程xml并将所有数据放入数组,然后将该数组传递给view.jsp。我只是不想用jsp本身编写代码。我想使用java类。谢谢。这就是我需要的!使用JSTL Core或Core RT taglibs将在JSP页面上为您提供一个更优雅的解决方案。这是我在任何相关主题中见过的最好的liferay教程。他们应该雇佣你编写文档、教程、文章、Wiki、演示、书籍和其他一切。@Nenotlep他们的文档对刚接触Portlet的人来说是多么糟糕,这让人印象深刻。100%同意
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);
}
}
<portlet:defineObjects />
<%
String[] anArrayFromMyPortlet = (String[])renderRequest.getAttribute("my-array");
%>
<ul>
<% for (String string : anArrayFromMyPortlet) { %>
<li><%= string %></li>
<% } %>
</ul>