我试图仅通过名为view.jsp的JSP文件在liferay中创建portlet。我需要的是:

  • 当portlet加载时,我想在生成数组的地方调用自定义Java类。
  • 我需要将该数组传递给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(),并具有两个参数:RenderRequestRendertResponse。此外,它还会引发一些异常,并将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/

    10-13 02:11