Создание портлета liferay-как передать данные для просмотра.jsp из класса Java?

Я пытаюсь создать портлет в liferay только из JSP-файла с именем view.jsp. Что мне нужно, так это:

  1. когда портлет загружается, я хочу вызвать пользовательский класс Java, где я генерирую массив.

  2. мне нужно передать этот массив в view.jsp.

Как это сделать?

3 ответов


вы создали свой портлет с create.sh сценарий из Liferay? В этом случае нам нужно будет создать новый класс портлета, который расширяет MVCPortlet:

public class ArrayPortlet extends MVCPortlet {

}

кроме того, вам придется менять WEB-INF/portlet.xml файл, чтобы указать на его класс. Заменить строку ниже на

 <portlet-class>com.liferay.util.bridges.mvc.MVCPortlet</portlet-class>

по одному названию класса портлета:

<portlet-class>br.com.seatecnologia.arrayportlet.ArrayPortlet</portlet-class>

это просто настройка. Теперь, крутая часть: код! Необходимо создать метод для обработки представления портлета. Этот метод должен быть назван doView() и имеет два параметра:RenderRequest и RendertResponse. Кроме того, он выдает некоторые исключения и делегирует рендеринг портлета методу суперкласса:

public void doView(RenderRequest renderRequest, RenderResponse renderResponse)
throws IOException, PortletException {
    super.doView(renderRequest, renderResponse);
}

однако перед отрисовкой портлета мы создаем наш массив:

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>

это результат этого кода в моей машине:

enter image description here


ваш вопрос довольно расплывчатый, я рекомендую получить некоторое представление о разработке портлетов, поскольку, похоже, речь идет об основном понимании инфраструктуры/спецификации.

попытка ответить на ваш вопрос дает несколько советов - извинения, если они также слишком расплывчато:

  • init () является частью жизненного цикла портлета и будет вызываться один раз при загрузке класса портлета.
  • вы можете передавать значения в свой вид, добавляя (например) запросить атрибуты для вашего RenderRequest в doView ()

конечно, это зависит от используемой вами структуры портлетов-методы, упомянутые выше, относятся к базовой спецификации портлета (т. е. JSR-286)


Вы можете сделать это несколькими способами :

1) Вы можете использовать renderRequest.setAttribute("my-array", array);

2) Вы можете поместить свои данные в сессии

request.getPortletSession().setAttribute("my-array", array);

во втором случае не забудьте удалить свой элемент из сеанса, когда он вам больше не нужен.