Нет режима редактирования в портлете Liferay - PullRequest
6 голосов
/ 13 февраля 2012

Я следую вместе с книгой Liferay In Action.Я в той части, где я добавляю режим редактирования в портлет.Портлет успешно развернут, и я добавил портлет, и теперь в книге говорится, что нужно щелкнуть гаечный ключ в портлете и щелкнуть ссылку «Настройки», но у меня нет ссылки «Настройки».Представление работает нормально.

Вот мой portlet.xml:

<?xml version="1.0"?>

<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" version="2.0">
<portlet>
    <portlet-name>hello-john</portlet-name>
    <display-name>Hello John</display-name>
    <portlet-class>com.liferaytest.portlet.HelloJohnPortlet</portlet-class>
    <init-param>
        <name>view-jsp</name>
        <value>/view.jsp</value>
    </init-param>
    <init-param>
        <name>edit-jsp</name>
        <value>/edit.jsp</value>
    </init-param>
    <expiration-cache>0</expiration-cache>
    <supports>
        <mime-type>text/html</mime-type>
        <portlet-mode>view</portlet-mode>
        <portlet-mode>edit</portlet-mode>
    </supports>
    <portlet-info>
        <title>Hello John</title>
        <short-title>Hello John</short-title>
        <keywords>Hello John</keywords>
    </portlet-info>
    <security-role-ref>
        <role-name>administrator</role-name>
    </security-role-ref>
    <security-role-ref>
        <role-name>guest</role-name>
    </security-role-ref>
    <security-role-ref>
        <role-name>power-user</role-name>
    </security-role-ref>
    <security-role-ref>
        <role-name>user</role-name>
    </security-role-ref>
</portlet>

Мой edit.jsp:

<%@ taglib uri="http://java.sun.com/portlet" prefix="portlet" %>

<jsp:useBean class="java.lang.String" id="addNameURL" scope="request" />

<portlet:defineObjects />

<form 
id ="<portlet:namespace />helloForm" 
action="<%= addNameURL %>" 
method="post">
<table>
    <tr>
        <td>Name:</td>
        <td><input type="text" name ="username"></td>
    </tr>
</table>
<input type="submit" id="nameButton" title="Add Name" value="Add Name">
</form>

Мой метод doEdit:

public void doEdit(RenderRequest renderRequest, RenderResponse renderResponse)
    throws IOException, PortletException {
    renderResponse.setContentType("text/html");
    PortletURL addNameURL = renderResponse.createActionURL();
    addNameURL.setParameter("addName", "addName");
    renderRequest.setAttribute("addNameURL", addNameURL.toString());
    include(editJSP, renderRequest, renderResponse);
}

Ответы [ 3 ]

3 голосов
/ 14 февраля 2012

Чтобы иметь страницу настроек (конфигурации) в вашем портлете в Liferay, вы должны реализовать интерфейс com.liferay.portal.kernel.portlet.ConfigurationAction и настроить портлет в liferay-portlet.xml для использования вашего класса.

<portlet>
  <portlet-name>MyPortlet</portlet-name>
  <configuration-action-class>com.mydomain.myportlet.ClassThatImplementsConfigurationAction</configuration-action-class>
  <instanceable>false</instanceable>
  ...
</portlet>

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

portletRequest.getPreferences();

, приводит к настройкам портлета конфигурации Liferay-s.

Чтобы получить настройки вашего портлета, добавьте этот метод в свой класс

protected PortletPreferences getPortletPreferences(final PortletRequest p_portletRequest) throws Exception {
    String portletResource = ParamUtil.getString(p_portletRequest, "portletResource");
    PortletPreferences prefs = PortletPreferencesFactoryUtil.getPortletSetup(p_portletRequest, portletResource);
    return prefs;
}

и вызвать его из реализованных методов

public void processAction(PortletConfig portletConfig, ActionRequest actionRequest,
        ActionResponse actionResponse) throws Exception;

public String render(PortletConfig portletConfig, RenderRequest renderRequest,
        RenderResponse renderResponse) throws Exception;
0 голосов
/ 10 марта 2012

Проверьте, правильно ли вы изменили файл portlet.xml.Особенно проверяйте тег поддержки.

0 голосов
/ 15 февраля 2012
<portlet-class>com.liferaytest.portlet.HelloJohnPortlet</portlet-class>

В случае, если этот класс расширяет класс genericportlet, убедитесь, что ваша строка editJSP соответствует "edit-jsp" в вашем методе init.

public void init() throws PortletException {
  editJSP = getInitParameter("edit-jsp");
  viewJSP = getInitParameter("view-jsp");
}

Если его MVCPortlet должен отображаться правильно.

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

  • Используйте правильный taglib:
<%@taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
  • направьте его вправо .tld в вашем web.xml
  • Включить правильные библиотеки (util-java.jar, util-taglib.jar, util-bridge.jar, portlet.jar)
  • Завершение работы сервера
  • Удалить все в рабочей папке (вашего сервера tomcat)
  • Запустите ваш сервер
  • Повторно разверните портлет
  • Если вы авторизованы в системе, попробуйте выполнить повторную регистрацию.
  • Меню настроек теперь должно бытьвидимый.
...