Навигация по портлетам в Liferay - PullRequest
4 голосов
/ 22 декабря 2011

Так что у меня возникли проблемы с выяснением того, как обращаться с навигацией в LifeRay. Я новичок в jsp, портлетах и ​​liferay, но думаю, что исчерпал всю документацию в поисках ответа.

Я ищу способ отправить HTML-форму и установить параметры визуализации с полями. Я хотел бы иметь URL-адреса, которые работают с обычной навигацией в браузере, и закладки URL. Я нашел способ сделать это с помощью javascript для обновления уже объявленного renderurl новыми значениями из формы, но я пытаюсь найти более чистый способ сделать это.

Прямо сейчас я попробовал несколько способов .. используя эту страницу

<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<%@ taglib uri="http://liferay.com/tld/aui" prefix="aui" %>
<%@ page import="com.liferay.portal.kernel.util.ParamUtil" %>
<%@ page import="com.liferay.portal.kernel.util.Validator" %>
<%@ page import="javax.portlet.PortletPreferences" %>

<portlet:defineObjects />


<%
    PortletPreferences prefs = renderRequest.getPreferences();
    String search = ParamUtil.getString(renderRequest, "search");
%>

<portlet:renderURL var="viewURL">
<portlet:param name="jspPage" value="/view.jsp" />
</portlet:renderURL>

<aui:form action="<%= viewURL %>" method="post">
     <aui:input label="search" name="search" type="text" value="<%=search %>" />
     <aui:button type="submit" />
</aui:form>

Используя post, я получу URL:

http://localhost:8080/web/10157/home?p_p_id=search_WAR_searchportlet_INSTANCE_Kt9C&p_p_lifecycle=0&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_count=1&_search_WAR_searchportlet_INSTANCE_Kt9C_jspPage=%2Fview.jsp

Если я изменю форму, чтобы получить, то я получу этот URL:

http://localhost:8080/web/10157/home?_search_WAR_searchportlet_INSTANCE_Kt9C_search=123

Но используя renderURL с набором параметров, я получил бы это, которое является комбинацией того, что и post, и get вернут:

http://localhost:8080/web/10157/home?p_p_id=search_WAR_searchportlet_INSTANCE_Kt9C&p_p_lifecycle=0&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_count=1&_search_WAR_searchportlet_INSTANCE_Kt9C_jspPage=%2Fview.jsp&_search_WAR_searchportlet_INSTANCE_Kt9C_search=123

Так что сейчас я могу использовать форму с post, и ParamUtil.getString распознает данные, но ссылка не будет добавлена ​​в закладки, или я мог бы использовать форму с get, оставив информацию в URL, но я не может получить ParamUtil для распознавания данных. Даже если бы я мог получить данные для распознавания с помощью формы get, я действительно не хочу использовать это, так как параметр не будет сохранен, если я выполняю какую-либо отправку из форм в других портлетах. Насколько я понимаю, RenderURLs сохраняют эти вещи.

Прошу прощения, если я полностью на этих вещах, пожалуйста. Я новичок в jsp, портлетах и ​​liferay и немного заблудился из-за того, как я должен делать многие из этих вещей.

Ответы [ 2 ]

1 голос
/ 07 февраля 2013

То, что вы сначала должны понять (и это заняло у меня много времени), - это рабочий процесс портлета.

Портлет либо сам обрабатывает свои действия.

Когда выполняется действиепортлет вызывается, ему также будет автоматически предложено выполнить его метод рендеринга (после его действия).

Фактически

  • Если вы хотите просто отобразитьпортлет
    • renderUrl
  • Если вы хотите отправить информацию на свой портлет
    • actionUrl
  • ifизменить конфигурацию / настройки вашего портлета
    • configurationUrl

Это чисто теоретический подход, поскольку вы можете испортить весь этот рабочий процесс.Тем не менее, я бы не рекомендовал вам делать это по нескольким причинам, таким как:

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

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

Если вы хотите получить настройки портлета, я рекомендую вам прочитать некоторые сведения о настройке портлета на вики Liferay .

Вы также, похоже, хотите иметь возможностьотправлять запросы-действия или обрабатывать запросы от портлета к другому.
Всегда имейте в виду, что тег liferay-portlet: actionURL и тег liferay-portlet: renderURL имеют атрибут portletName, который позволяет вам указать портлет, отличный оттекущий.

Надеюсь, это поможет.Не стесняйтесь спрашивать, если я не достаточно ясно, или если это вызывает другие вопросы.

1 голос
/ 28 марта 2012

как вам нужно использовать

<portlet:actionURL>

для обработки формы отправки действия .....

...