Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

Создал ли ваш портлет с create.sh script от 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

Ответ 2

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

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

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

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

Ответ 3

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

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

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

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

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