Создание портлета liferay - как передать данные в view.jsp из класса Java? - PullRequest
19 голосов
/ 01 августа 2011

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

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

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

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

Ответы [ 3 ]

39 голосов
/ 02 августа 2011

Вы создали свой портлет с помощью скрипта 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() и имеет два параметра: a RenderRequest и a 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

3 голосов
/ 02 августа 2011

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

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

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

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

2 голосов
/ 19 декабря 2015

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

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

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

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

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

...