2012-02-13 135 views
6

我正在关注Liferay In Action书籍。我正在将编辑模式添加到portlet的部分。 Portlet部署成功,我已经添加了Portlet,现在本书说要单击Portlet中的扳手并单击“首选项”链接,但我没有首选项链接。视图工作正常。Liferay portlet中没有编辑模式

这里是我的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); 
} 
+0

是否可以在doEdit方法中进行调试?我想知道控件是否要通过doEdit方法来完成。接下来,我还希望您在部署过程中看到控制台,同时将该Portlet放置在页面中以查看是否有任何错误。 – 2012-02-14 06:36:51

+0

我有同样的问题,我发现我的错误比较我的代码与作者的书liferay在行动http://www.liferay.com/pt/web/richard.sezov/documents代码。您可以访问文件夹“代码”并下载plugins-lia.zip,在那里您可以找到本书的其他源代码。 – meurer 2013-06-01 03:18:58

回答

3

要有喜好(配置)PAG e在Liferay的portlet中,您必须实现com.liferay.portal.kernel.portlet.ConfigurationAction接口并在liferay-portlet.xml中配置portlet以使用您的类。

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

您还应该意识到,在该类中您处于Liferay的配置portlet中,而不是您的portlet。因此得到如下偏好:

portletRequest.getPreferences(); 

会导致Liferay-s配置portlet的偏好。

为了让您的portlet的喜好这个方法添加到您的类

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; 
+1

当您实现与“首选项/编辑”页面不同的“配置”页面时,它的ConfigurationActionImpl是什么? – Jonny 2012-02-15 08:41:25

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

如果这个类扩展了GenericPortlet类确保调用它的editJSP字符串与init方法中的“edit-jsp”匹配。

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服务器)下的一切
  • 启动服务器
  • 重新部署门户
  • 如果您在autologed,尝试relogging。
  • 首选项菜单现在应该可见。
0

检查您是否正确更改了portlet.xml文件。特别是检查支持标签。