创建liferay portlet-如何从Java类将数据传递到view.jsp?

创建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类时将被调用一次 您可

我正在尝试在liferay中创建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>