2012-02-13 33 views
6

Lo sigo junto con el libro de Liferay In Action. Estoy en la parte en la que agrego Edit-Mode a un portlet. El portlet se implementó correctamente y he agregado el portlet y ahora el libro dice que haga clic en la llave en el portlet y haga clic en el enlace Preferencias, pero no tengo un enlace de Preferencias. La vista está funcionando bien.Sin modo de edición en el portlet Liferay

Aquí es mi 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> 

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

Mi método 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

¿Es posible poner una depuración en el método doEdit? Quiero saber si el control está llegando al método doEdit. A continuación, también quiero que vea la consola durante la implementación y mientras coloca el portlet en la página para ver si hay algún error. –

+0

Estaba teniendo el mismo problema y he encontrado mi error al comparar mi código con el código de autor del libro liferay en acción http://www.liferay.com/pt/web/richard.sezov/documents. Puede acceder a la carpeta "Código" y descargar plugins-lia.zip, allí encontrará este y otros códigos fuente del libro. – meurer

Respuesta

3

Para tener preferencias (configuración) pag e en su portlet en Liferay debe implementar la interfaz com.liferay.portal.kernel.portlet.ConfigurationAction y configurar el portlet en liferay-portlet.xml para usar su clase.

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

También debe tener en cuenta que dentro de esa clase se encuentra en el portlet de configuración de Liferay, no en su portlet. Para obtener preferencias como

portletRequest.getPreferences(); 

se obtienen las preferencias del portlet de configuración de Liferay-s.

Para obtener las preferencias de portlet añadir este método a la clase

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

y llaman a métodos implementados

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

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

¿Es ConfigurationActionImpl cuando está implementando una página de "Configuración" que no es lo mismo que una página de Preferencias/Editar? – Jonny

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

En el caso de esta clase extiende la clase genericportlet asegúrese de que su editJSP string concuerda con "edit-jsp" en su método init.

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

Si su MVCPortlet Se debe mostrar correctamente.

Las siguientes acciones no están directamente relacionadas con su problema, pero existe la posibilidad de que el problema se resuelva mediante los siguientes pasos.

  • Utilice el taglib correcta:
<%@taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %> 
  • punto a la derecha en su .tld Web.xml
  • Incluir las librerías correctas (util-java. jar, util-taglib.jar, util-bridge.jar, portlet.jar)
  • apagar el servidor
  • Eliminar todo bajo carpeta de trabajo (de su servidor Tomcat)
  • iniciar el servidor
  • Volver a implementar el portlet
  • Si Usted está en autologed, tratar relogging.
  • El menú de preferencias debería estar ahora visible.
0

Compruebe si ha cambiado correctamente el archivo portlet.xml. Especialmente revise la etiqueta de soporte.

Cuestiones relacionadas