Ответ 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>
Это результат этого кода на моей машине: