2012-02-13 64 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文件。特別是檢查支持標籤。