Создание портлета liferay-как передать данные для просмотра.jsp из класса Java?
Я пытаюсь создать портлет в liferay только из JSP-файла с именем view.jsp
. Что мне нужно, так это:
когда портлет загружается, я хочу вызвать пользовательский класс Java, где я генерирую массив.
мне нужно передать этот массив в
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>
это результат этого кода в моей машине:
ваш вопрос довольно расплывчатый, я рекомендую получить некоторое представление о разработке портлетов, поскольку, похоже, речь идет об основном понимании инфраструктуры/спецификации.
попытка ответить на ваш вопрос дает несколько советов - извинения, если они также слишком расплывчато:
- init () является частью жизненного цикла портлета и будет вызываться один раз при загрузке класса портлета.
- вы можете передавать значения в свой вид, добавляя (например) запросить атрибуты для вашего RenderRequest в doView ()
конечно, это зависит от используемой вами структуры портлетов-методы, упомянутые выше, относятся к базовой спецификации портлета (т. е. JSR-286)
Вы можете сделать это несколькими способами :
1) Вы можете использовать renderRequest.setAttribute("my-array", array);
2) Вы можете поместить свои данные в сессии
request.getPortletSession().setAttribute("my-array", array);
во втором случае не забудьте удалить свой элемент из сеанса, когда он вам больше не нужен.