2012-02-13 15 views
6

Podążam razem z książką Liferay In Action. Jestem w części, w której dodajem tryb edycji do portletu. Portlet został pomyślnie wdrożony i dodałem portlet, a teraz książka mówi, aby kliknąć klucz w portlecie i kliknąć łącze Preferencje, ale nie mam linku Preferencje. Widok działa poprawnie.Brak trybu edycji w portlecie Liferay

Oto mój 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> 

Moja 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> 

Moja metoda 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); 
} 
+0

Czy jest możliwe umieszczenie debugowania w metodzie doEdit? Chcę wiedzieć, czy kontrola nadejdzie do zrobienia metody. Następnie chcę, abyś zobaczył konsolę podczas wdrażania i podczas umieszczania portletu na stronie, aby sprawdzić, czy wystąpił jakiś błąd. –

+0

Miałem ten sam problem i znalazłem swój błąd, porównując mój kod z kodem autora książki liferay w akcji http://www.liferay.com/pt/web/richard.sezov/documents. Możesz uzyskać dostęp do folderu "Kod" i pobrać plik plugins-lia.zip, tam znajdziesz ten i inne kody źródłowe książki. – meurer

Odpowiedz

3

Aby mieć preferencje (konfiguracja) Pag e w portlecie w Liferay musisz zaimplementować interfejs com.liferay.portal.kernel.portlet.ConfigurationAction i skonfigurować portlet w liferay-portlet.xml, aby użyć twojej klasy.

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

Należy również pamiętać, że wewnątrz tej klasy jesteś w konfiguracji portletu Liferay, nie twój portlet. Uzyskiwanie preferencji, takich jak: powoduje wyświetlenie preferencji portletu konfiguracji Liferay.

Aby uzyskać preferencje swojej portletu dodać tę metodę do klasy

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; 
} 

i wywołać ją z wdrożonych metod

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

public String render(PortletConfig portletConfig, RenderRequest renderRequest, 
     RenderResponse renderResponse) throws Exception; 
+1

To ConfigurationActionImpl podczas wdrażania strony "Konfiguracja", która nie jest taka sama jak strona Preferencje/Edycja? – Jonny

0
<portlet-class>com.liferaytest.portlet.HelloJohnPortlet</portlet-class> 

W przypadku, gdy klasa rozszerza klasę genericportlet upewnić się, że Ciąg editJSP dopasowuje "edit-jsp" do metody init.

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

Jeśli jego MVCPortlet Powinien on być wyświetlany poprawnie.

Poniższe czynności nie są bezpośrednio związane z problemem, ale istnieje możliwość, że problem można rozwiązać, wykonując następujące czynności.

  • Użyj prawidłowego TagLib:
<%@taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %> 
  • punkt w prawo .TLD w web.xml
  • zawierają poprawną bibliotekami (util-java. jar, util-taglib.jar, util-bridge.jar, portlet.jar)
  • wyłączyć serwer
  • Usuń wszystko pod folderze roboczym (z serwera tomcat)
  • uruchomić serwer
  • przesunięcie portlet
  • jeśli jesteś autologed, spróbuj relogging.
  • Menu preferencji powinno być teraz widoczne.
0

Sprawdź, czy plik portlet.xml został poprawnie zmieniony. Szczególnie sprawdź tag wsparcia.

Powiązane problemy