跳轉到內容

ZK/入門指南/安裝和配置

來自 Wikibooks,開放世界中的開放書籍

安裝和配置

[編輯 | 編輯原始碼]

在 Tomcat 上安裝 ZK

1. 從 http://tomcat.apache.org 下載 Tomcat 並安裝,如果您尚未安裝。(已測試透過連結 https://https://:8080 訪問)

2. 停止 Tomcat

3. 解壓縮 zk-*.zip 或 zk-*.tar.gz

4. 將 dist/lib/*.jar、dist/lib/zkforge/*.jar 和 dist/lib/ext/*.jar 複製到 $TOMCAT_HOME/shared/lib($TOMCAT_HOME 是您安裝 Tomcat 的位置)。不要在 $TOMCAT_HOME/shared/lib 資料夾內使用子資料夾結構。

5. 啟動 Tomcat

6. 瀏覽到 https:///managerhttps://:8080/manager 並將 demo/bin/zkdemo.war 部署到 Tomcat,或者直接將其複製到 $TOMCAT_HOME/webapps。如果您更喜歡直接複製,則必須先停止 Tomcat。如果檔案丟失,請改為獲取 zksandbox.war

7. 瀏覽到 https:///zkdemo/userguidehttps://:8080/zkdemo/userguidehttps://:8080/zksandbox/,具體取決於您為 Tomcat 配置的內容。

Tomcat 4.1

[編輯 | 編輯原始碼]

從 3.0 版本開始,ZK 與 Tomcat 4.1 無縫協作,因為它不再依賴於 JSP 2.0 技術。

如果您使用的是 3.0 之前的 ZK 舊版本,則必須將 jsp-api.jar 複製到 $TOMCAT_HOME/common/lib。jsp-api.jar 檔案可以在 Tomcat 的下載檔案中找到,或者在 Subversion 中找到。

Tomcat 5.0.30

[編輯 | 編輯原始碼]

ZK 的日誌記錄器不支援 Tomcat 5.0.30 版本。

安裝在 Ubuntu 7.10 上的 Tomcat 5.5 安全策略配置

[編輯 | 編輯原始碼]

感謝 Ed Clement

要解決:java.security.AccessControlException: access denied (java.util.PropertyPermission org.zkoss.util.resource.checkPeriod read) [後面跟著堆疊跟蹤]

1) 開啟 Tomcat Web 應用程式許可權檔案。在我的例子中,它位於 /etc/tomcat5.5/policy.d/04webapps.policy(不確定此位置或檔名會有多大差異)2) 我在檔案末尾添加了以下行

//added for zkdemo webapp 
grant codeBase "file:${catalina.home}/webapps/zkdemo/-" { 
permission java.security.AllPermission; 
}; 

3) 儲存檔案並重新啟動 Tomcat(不確定是否需要,但我還是做了)

顯然,此解決方案應該適用於 zk web 應用程式,您只需要將“zkdemo”更改為您嘗試部署/執行的 Web 應用程式的名稱。

Apache + Tomcat

[編輯 | 編輯原始碼]

待定。

Tomcat 身份驗證

[編輯 | 編輯原始碼]

問題:Executions.getCurrent().getRemoteUser() 返回 null。

解決方案:啟用 Tomcat 身份驗證配置

web.xml

 <security-constraint>
    <web-resource-collection>
      <web-resource-name>zkLoader</web-resource-name>
      <url-pattern>*.zul</url-pattern>
      <http-method>GET</http-method>
      <http-method>POST</http-method>
    </web-resource-collection>
    <web-resource-collection>
      <web-resource-name>auEngine</web-resource-name>
      <url-pattern>/zkau/*</url-pattern>
      <http-method>GET</http-method>
      <http-method>POST</http-method>
    </web-resource-collection>
    <auth-constraint>
      <description>Authorized Users Group</description>
      <role-name>test</role-name>
    </auth-constraint>
    <user-data-constraint>
      <transport-guarantee>NONE</transport-guarantee>
    </user-data-constraint>
  </security-constraint>

  <login-config>
    <auth-method>BASIC</auth-method>
  </login-config>

  <security-role>
    <description>Test role</description>
    <role-name>test</role-name>
  </security-role>

tomcat-users.xml

<tomcat-users>
  <user name="testuser" password="testpassword" roles="test"/>
</tomcat-users>

1. 從 http://caucho.com/download/index.xtp 下載 Resin 並安裝,如果您尚未安裝。

2. 停止 Resin

3. 解壓縮 zk-1.0.0.zip 或 zk-1.0.0.tar.gz

4. 將 dist/lib/*.jar 複製到 $RESIN_HOME/lib($RESIN_HOME 是您安裝 Resin 的位置)。

5. 將 dist/lib/ext/*.jar 複製到 $RESIN_HOME/lib

6. [可選] 將 dist/lib/zkforge/*.jar 複製到 $RESIN_HOME/lib(這取決於您是否需要來自 ZK Forge 的元件)

7. 透過將其直接複製到 $RESIN_HOME/webapps 將 demo/bin/zkdemo.war 部署到 Resin。

8. 啟動 Resin。

9. 瀏覽到 https:///zkdemo/userguidehttps://:8080/zkdemo/userguide,具體取決於您的配置。

作者:Peter Manchev

1. 從 http://www.mortbay.org/jetty/index.html 下載 Jetty 並安裝,如果您尚未安裝。

2. 停止 Jetty。

3. 解壓縮 zk-1.x.x.zip 或 zk-1.x.x.tar.gz

4. 將 dist/lib/*.jar 複製到 $JETTY_HOME/lib

  ($JETTY_HOME is where you installed Jetty.)

5. 將 dist/lib/ext/*.jar 複製到 $JETTY_HOME/lib

6. [可選] 將 dist/lib/zkforge/*.jar 複製到 $JETTY_HOME/lib

  (It depends whether you need component from ZK Forge)

7. 透過將其直接複製到 $JETTY_HOME/webapps 將 demo/bin/zkdemo.war 部署到 Jetty。

8. 啟動 Jetty。

9. 瀏覽到 https:///zkdemo/userguidehttps://:8080/zkdemo/userguide,具體取決於您的配置。

JBoss 4.0 及以上版本

[編輯 | 編輯原始碼]

1. 從 http://www.jboss.com/downloads/index 下載 Jboss 並安裝,如果您尚未安裝。

2. 使用連結 https://:port 測試 Jboss,如果正常,請停止伺服器。

3. 解壓縮 zk-2.2.0-RC.zip 或 zk-2.2.0-RC.tar.gz

4. 將 dist/lib/*.jar 和 dist/lib/*/*.jar 複製到 $JBOSS_HOME/server/default/lib

5. 將 zkdemo.war 複製到 $JBOSS_HOME/server/default/deploy

6. 啟動伺服器。

7. 瀏覽到 https:///zkdemo/userguidehttps://:8080/zkdemo/userguide,具體取決於您為 Jboss 配置的內容。

作者:Juan Jose Buendia Mardones(智利)

JBoss 3.2.2 + tomcat 4.1

[編輯 | 編輯原始碼]

1. 按照說明在 tomcat 4.1 上安裝 ZK Ajax。

2. 下載檔案

  bsh-bsf-2.0b4.jar
  bsh-core-2.0b4.jar
  bsh-2.0b2.jar
  and copy them to the lib directory under default. 

3. 更改 web.xml 以使其符合 servlet 2.3 規範。

4. 我們仍在解決一些問題,我將在獲得完整解決方案後更新此記錄。

當我嘗試 Mars Chen 給出的解決方案時,一些基於 Jboss 平臺構建的元件無法再工作。但是,當我執行我的解決方案時,其中一個 ZK 元件(上傳檔案)無法工作。但目前,我採取了一種變通方法,在後臺使用 tomcat 5.5。

作者:Yaniv Ran(美國)

2.1 我找到了另一個簡單的解決方案:將 ZK 分發的 bsh.jar 放入 JBoss lib 目錄以替換 bsh-core-version.jar。

請參考BeanShell官方網站。== http://www.beanshell.org/download.html == bsh-version.jar包含bsh-core-version.jar中的所有檔案。

作者:陳火星 (臺灣)

Oracle OC4J 和 Oracle OPMN 版本 3

[編輯 | 編輯原始碼]

簡介:OC4J 10.1.3(版本 3)是Oracle Containers For Java的第一個生產版本,支援J2EE 1.4規範(Servlet 2.4)。之前的版本10.1.20.2、10.20.1.1僅支援J2EE 1.3(帶Servlet 2.3),ZK無法與這些版本一起使用。

1. 從http://www.oracle.com下載OC4J 10.1.3或更高版本並安裝。

2. 必須設定OC4J以便在命令列使用-userThreads引數執行(oc4j.cmd,在OPMN中,這在opmn.xml內完成<data id="oc4j-options" value="-userThreads" />)。

3. 解壓縮zk-1.2.0-2006-04-07.zip或更高版本。

4. 將dist/lib/*.jar和dist/lib/ext/*.jar複製到$OC4J_HOME/j2ee/home/applib。

5. 啟動OC4J伺服器,並在提示時輸入新的oc4jadmin密碼,或者如果伺服器已啟動則重新啟動伺服器。

6. 開啟“企業管理器”應用程式 - 只需瀏覽到https://:8888/em/

7. 以oc4jadmin身份登入並轉到應用程式-->部署頁面。

8. 部署zkdemo.war(按照螢幕上的說明操作)。

9. 瀏覽到https://:8888/zkdemo/userguide

  • 將“/zkdemo”替換為您在部署期間在EM中輸入的上下文URI。
  • 啟動OC4J伺服器
  bin/oc4j -start

BEA WebLogic

[編輯 | 編輯原始碼]

注意本安裝指南適用於Windows。

1. 從[1]下載Weblogic 9.1。

2. 啟動Weblogic安裝程式並接受所有預設設定。

3. 完成預設安裝後,透過單擊“開始” ->“程式” ->“BEA產品” ->“工具” ->“配置嚮導”建立Weblogic域。

4. 選擇“建立新的Weblogic域”並單擊“下一步”。

5. 在“選擇域源”中接受預設設定並單擊“下一步”。

6. 在“配置管理員使用者名稱和密碼”中輸入密碼並單擊“下一步”。

7. 在“配置伺服器啟動模式和JDK”中接受所有預設設定並單擊“下一步”。

8. 在“配置環境設定和服務”中選擇“否”並單擊“下一步”。

9. 在“建立Weblogic域”中接受所有預設設定並單擊“建立”。

10. 建立域後,選中“啟動管理伺服器”複選框並單擊“完成”。

11. 伺服器將啟動。

12. HTTP埠預設為7001,除非您更改它。

部署應用程式最簡單的方法是將您的war/ear(它可以是展開的格式)複製到weblogic安裝目錄下的autodeploy目錄。如果您按照上述說明操作,則該目錄位於C:\bea\user_projects\domains\base_domain\autodeploy。當您將war/ear檔案放入該目錄時,weblogic將檢測到它並進行熱部署。

如果要將ZK庫複製到域,請將其放在c:/bea/user_projects/domains/base_domain/lib下。

必須複製的庫包括bsh.jar commons-fileupload.jar commons-el.jar pxcommon.jar pxweb.jar zk.jar zul.jar zhtml.jar。

IBM WebSphere快速入門

[編輯 | 編輯原始碼]

1.IBM提供了一個Websphere應用程式伺服器社群版,請訪問http://www-128.ibm.com/developerworks/downloads/ws/wasce/?S_TACT=105AGX10&S_CMP=WASCE下載。
2.按照說明下載,如果您還沒有帳戶,可能需要註冊一個帳戶。
3.在下載中,選擇伺服器和32位IBM SDK 1.4.2 SR4-1,繼續下載。
4.啟動安裝程式並接受所有預設設定。
5.安裝完成後,轉到“所有程式” ->“IBM Websphere” ->“應用程式伺服器” ->“配置檔案” ->“預設” ->“啟動伺服器”,這將啟動伺服器。
6. 瀏覽https://:9060/ibm/console/secure/logon.do以部署應用程式。
7.部署後,可以透過https://:9080/myapp訪問應用程式,有關其他文件和教程,請訪問http://publib.boulder.ibm.com/wasce/Front_en.html


如何在Eclipse Wtp中設定ZK

如何在Eclipse Wtp和XAMPP中設定ZK

另請參閱:http://www.zkoss.org/smalltalks/eclipse/ek.html

如何在Eclipse中設定zul.xsd模式

[編輯 | 編輯原始碼]
  1. 您應該已將Eclipse設定為與ZK一起使用。詳細資訊在上面的簡短談話中。
  2. 執行Eclipse SDK。
  3. 從選單中選擇視窗/首選項...,然後彈出首選項對話方塊。
  4. 從左側側邊欄樹形選單中選擇XML/XML目錄,右側是XML目錄面板。
  5. XML目錄條目欄位中選擇使用者指定的條目,然後按新增...按鈕。
  6. 現在將彈出新增XML目錄條目對話方塊。
  7. 現在您應該在使用者指定的條目下看到一個新的條目http://www.zkoss.org/2005/zul/zul.xsd
  8. 完成。

如何使用Eclipse從ZUL模式生成ZUL檔案

[編輯 | 編輯原始碼]
  1. 您應該已在Eclipse中設定了zul.xsd模式。
  2. 從Eclipse SDK選單中選擇檔案/新建/其他...,然後彈出新建對話方塊。
  3. 選擇嚮導頁面中,從樹形選單中選擇XML/XML,然後按下一步>按鈕。
  4. 建立XML檔案頁面中,選擇從XML模式檔案建立XML檔案,然後按下一步>按鈕。
  5. XML檔名頁面中,鍵入或選擇專案合適的父資料夾。它通常位於專案的WebContext資料夾下。然後鍵入要建立的ZUL檔名(例如helloworld.zul),然後按下一步>按鈕。
  6. 選擇XML模式檔案頁面中,選擇選擇XML目錄條目選項。您應該在XML目錄列表中看到http://www.zkoss.org/2005/zul/zul.xsd。現在選擇該條目並按下一步>按鈕。
  7. 選擇根元素頁面中
    • 根元素欄位中,選擇合適的根元素。在大多數ZK應用程式中,它通常是windowzk元素。
    • 內容選項欄位中,您可以保持原樣。
    • 名稱空間資訊欄位中,您可以選擇該條目並按編輯...按鈕以刪除字首或更改字首。
    • 完成按鈕。
  8. ZUL檔案已建立並在XML編輯器視窗中開啟。
  9. 現在您可以開始編輯ZUL檔案。按Alt-/以開啟內容輔助彈出視窗,以幫助您填寫合適的ZUL元素和屬性。
  10. 完成。

如何設定Eclipse以使用zhtml

[編輯 | 編輯原始碼]
  1. 從Eclipse SDK選單中選擇視窗/首選項...,然後將彈出首選項對話方塊。
  2. 從左側側邊欄樹形選單中選擇常規內容型別目錄,右側是內容型別面板。
  3. 在內容型別中選擇文字XML,然後按新增...按鈕。
  4. 新增*.zhtml或諸如*.zul、*.jsp、*.html等。
  5. 最後,您可以按檔案上的右鍵單擊並在開啟方式選單中選擇XML編輯器
  6. 完成。

如何設定Eclipse的Rational Application Developer RAD版本以使用zhtml

[編輯 | 編輯原始碼]
  1. 從SDK選單中選擇視窗/首選項...,然後將彈出首選項對話方塊。
  2. 選擇工作臺/檔案關聯,然後單擊頂部的新增以新增檔案型別*.zhtml。
  3. 單擊下面的新增並選擇HTML源頁面編輯器,並將其設定為預設值。
  4. 完成


安裝Liferay(在tomcat上)和ZK Portlet

[編輯 | 編輯原始碼]

Liferay安裝

[編輯 | 編輯原始碼]

有多種方法可以做到這一點,一種方法是訪問Liferay並下載預捆綁的Liferay Tomcat捆綁包。這是最簡單的方法,但當然,如果您有預先存在的Tomcat伺服器,則不是理想的方法。

如果您已經擁有一個Tomcat伺服器,並且不想部署另一個伺服器,您可以下載Liferay war檔案。Liferay的安裝通常會從伺服器中刪除ROOT,但我個人不喜歡這樣做,所以我會在不丟失您的root的情況下進行解釋。

  • 首先,如果您沒有Tomcat,請在您喜歡的作業系統上下載並安裝最新的穩定版Tomcat(您可以嘗試其他應用程式伺服器,但經驗告訴我,其他伺服器可能一開始會更棘手,因為配置通常更冗長)。
  • 接下來,從Liferay下載非捆綁的Liferay war檔案(Liferay Portal Professional 4.2.1 WAR)。
  • 還要下載名為Liferay Portal 4.2.1 Dependencies的附加檔案,並將其解壓縮到shared/lib目錄下。
  • 為了保留您的ROOT,您需要將war檔案的內容提取到一個資料夾中,例如命名為“myportal”。
  • 在WEB-INF資料夾下建立一個“classes”資料夾,在這個資料夾中建立一個名為“portal-ext.properties”的檔案,在檔案中新增以下內容(請注意,您可以根據您以後的配置更改portal.ctx和/或lucene和jackrabbit目錄)。
portal.release=professional
portal.ctx=/myportal
auto.deploy.dest.dir=../webapps
portal.instances=1
lucene.dir=C:/home/liferay/lucene
jcr.jackrabbit.repository.root=C:/home/liferay/jackrabbit
omniadmin.users=
  • 返回WEB-INF資料夾並編輯web.xml檔案,將root_path的param值更改為'/myportal',因此web.xml檔案頂部將如下所示。
<?xml version="1.0"?>

<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
	<context-param>
		<param-name>company_id</param-name>
		<param-value>liferay.com</param-value>
	</context-param>
	<context-param>
		<param-name>root_path</param-name>
		<param-value>/myportal</param-value>
	</context-param>
	<filter>
		<filter-name>Auto Login Filter</filter-name>
		<filter-class>com.liferay.portal.servlet.filters.autologin.AutoLoginFilter</filter-class>
	</filter>
.
.
.
  • 現在進入META-INF資料夾並新增一個名為“context.xml”的檔案,並新增以下內容(將其配置為您自己的特定內容,只需確保context path屬性為'/myportal',如果您不使用MySQL資料庫,只想讓Liferay使用hSQLdb,只需刪除第一個Resource元素)。
<Context path="/myportal" reloadable="true" >
    <Resource
        name="jdbc/LiferayPool"
        auth="Container"
        type="javax.sql.DataSource"
        driverClassName="com.mysql.jdbc.Driver"
	  url="jdbc:mysql:///lportal?useUnicode=true&characterEncoding=UTF-8"
        username="liferay"
        password="yarefil"
        maxActive="100"
        maxIdle="30"
        maxWait="10000"
    />
    <Resource
                name="mail/MailSession"
                auth="Container"
                type="javax.mail.Session"
                mail.transport.protocol="smtp"
                mail.smtp.host="localhost"
    />
    <Realm 
                className="org.apache.catalina.realm.JAASRealm"
                appName="PortalRealm"
                userClassNames="com.liferay.portal.security.jaas.PortalPrincipal"
                roleClassNames="com.liferay.portal.security.jaas.PortalRole"
                debug="99"
                useContextClassLoader="false"
    />
</Context>
  • 現在是真正的技巧,當您將上下文更改為ROOT以外的其他內容時,Liferay 4.2存在一個小錯誤。在html/portal資料夾中,您會找到一個名為load_render_portlet.jsp的檔案,開啟檔案並轉到第55-56行,它應該如下所示。
			function <%= namespace %>loadPortlet() {
				var path = "/c/portal/render_portlet";

但它應該如下所示。

			function <%= namespace %>loadPortlet() {
				var path = "/myportal/c/portal/render_portlet";

好的,我相信有更好的方法來做到這一點,但我寧願讓Liferay團隊自己來做。

  • 如果您希望使用MySQL,您需要將context.xml修改為您自己的配置,您還需要下載liferay-mysql指令碼檔案並將其執行到您的資料庫中。
  • 現在,在您的根資料夾(例如Windows的C:\,UNIX/LINUX的/)中,您需要建立一個“home”資料夾(如果不存在),並在其中建立一個“liferay”資料夾。確保Tomcat有許可權修改該資料夾。
  • 現在您需要做的就是重新壓縮該資料夾並將zip檔案重新命名為myportal.war,將其放入Tomcat的webapps部署目錄中,(希望)您將擁有一個可執行的Liferay門戶。

部署ZK portlet

[編輯 | 編輯原始碼]

在這裡,我假設您熟悉並已建立了一個ZK war檔案。

  • 首先,您需要告訴Liferay您的portlet,因此建立一個如下所示的類。
/**
 * Copyright (c) 2000-2006 Liferay, LLC. All rights reserved.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

package za.co.mypackage.portlet;

import java.io.IOException;

import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.GenericPortlet;
import javax.portlet.PortletException;
import javax.portlet.PortletRequestDispatcher;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * @author  Brian Wing Shun Chan
 * @modified Glenn Keith
 */
public class JSPPortlet extends GenericPortlet {

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

	public void doDispatch(RenderRequest req, RenderResponse res)
		throws IOException, PortletException {

		String jspPage = req.getParameter("jspPage");

		if (jspPage != null) {
			include(jspPage, req, res);
		}
		else {
			super.doDispatch(req, res);
		}
	}

	public void doEdit(RenderRequest req, RenderResponse res)
		throws IOException, PortletException {

		if (req.getPreferences() == null) {
			super.doEdit(req, res);
		}
		else {
			include(editJSP, req, res);
		}
	}

	public void doHelp(RenderRequest req, RenderResponse res)
		throws IOException, PortletException {

		include(helpJSP, req, res);
	}

	public void doView(RenderRequest req, RenderResponse res)
		throws IOException, PortletException {

		include(viewJSP, req, res);
	}

	protected void include(String path, RenderRequest req, RenderResponse res)
		throws IOException, PortletException {

		PortletRequestDispatcher prd =
			getPortletContext().getRequestDispatcher(path);

		if (prd == null) {
			_log.error(path + " is not a valid include");
		}
		else {
			prd.include(req, res);
		}
	}

	protected String editJSP;
	protected String helpJSP;
	protected String viewJSP;

	private static Log _log = LogFactory.getLog(JSPPortlet.class);

}
  • 接下來,在您的WEB-INF中建立一個名為“liferay-display.xml”的檔案,其內容如下所示。
<?xml version="1.0"?>
<!DOCTYPE display PUBLIC "-//Liferay//DTD Display 4.0.0//EN" "http://www.liferay.com/dtd/liferay-display_4_0_0.dtd">

<display>
	<category name="category.test">
		<portlet id="portletone" />
	</category>
</display>
  • 現在,還在WEB-INF中建立一個名為“liferay-portlet.xml”的檔案,其內容如下所示。
<?xml version="1.0"?>
<!DOCTYPE liferay-portlet-app PUBLIC "-//Liferay//DTD Portlet Application 4.1.0//EN" "http://www.liferay.com/dtd/liferay-portlet-app_4_1_0.dtd">

<liferay-portlet-app>
	<portlet>
		<portlet-name>portletone</portlet-name>
		<instanceable>true</instanceable>
	</portlet>
	<role-mapper>
		<role-name>administrator</role-name>
		<role-link>Administrator</role-link>
	</role-mapper>
	<role-mapper>
		<role-name>guest</role-name>
		<role-link>Guest</role-link>
	</role-mapper>
	<role-mapper>
		<role-name>power-user</role-name>
		<role-link>Power User</role-link>
	</role-mapper>
	<role-mapper>
		<role-name>user</role-name>
		<role-link>User</role-link>
	</role-mapper>
</liferay-portlet-app>
  • 現在,再次在WEB-INF中建立一個名為“portlet.xml”的檔案,其內容如下所示。
<?xml version="1.0"?>

<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd" version="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd">
	<portlet>
		<portlet-name>portletone</portlet-name>
		<display-name>Sample JSP Portlet</display-name>
		<portlet-class>za.co.mypackage.JSPPortlet</portlet-class>
		<init-param>
			<name>view-jsp</name>
			<value>/view.zul</value>
		</init-param>
		<expiration-cache>0</expiration-cache>
		<supports>
			<mime-type>text/html</mime-type>
		</supports>
		<portlet-info>
			<title>Sample JSP Portlet</title>
			<short-title>Sample JSP Portlet</short-title>
			<keywords>Sample JSP Portlet</keywords>
		</portlet-info>
		<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>
</portlet-app>
  • 您會注意到此檔案中的/view.zul引用是portlet的“index”檔案,還要注意在所有這些檔案中,我都引用了“portletone”,您需要將其更改為您war檔案的名稱。
  • 最後,在web.xml檔案的<web-app>之後新增以下內容(緊隨其後的典型ZK內容)。
.
.
.
	<display-name>sample-jsp-portlet</display-name>
	<context-param>
		<param-name>company_id</param-name>
		<param-value>liferay.com</param-value>
	</context-param>
	<listener>
		<listener-class>com.liferay.portal.kernel.servlet.PortletContextListener</listener-class>
	</listener>
.
.
.

BJaouad

您會注意到我將company_id保留為liferay.com。我之所以這樣保留,是因為更改該值也意味著需要深入研究Liferay資料庫,找到所有需要修改值的位置並不難,所以如果您這樣做,則需要自行解決。

  • 將生成的war檔案部署到/home/liferay/deploy目錄中。
  • 訪問並登入您的門戶,點選“新增內容”連結,在“測試”類別下新增“示例JSP Portlet”。

瞧,一個帶有ZK portlet的門戶。

部署ZK Porlet

[編輯 | 編輯原始碼]

1)web.xml

在web.xml中定義portlet的定義。

<web-app> 
<display-name>ZK Portlets</display-name> 
 
<servlet> 
<description>ZK loader for ZUML pages</description> 
<servlet-name>zkLoader</servlet-name> 
<servlet-class>org.zkoss.zk.ui.http.DHtmlLayoutServlet</servlet-class> 
<init-param> 
<param-name>update-uri</param-name> 
<param-value>/zkau</param-value> 
</init-param> 
<load-on-startup>1</load-on-startup><!-- Must --> 
</servlet> 
 
<servlet-mapping> 
<servlet-name>zkLoader</servlet-name> 
<url-pattern>*.zul</url-pattern> 
</servlet-mapping>  

<servlet-mapping> 
<servlet-name>zkLoader</servlet-name> 
<url-pattern>/zk/*</url-pattern> 
</servlet-mapping> 
 
<servlet> 
<description>The asynchronous update engine for ZK</description> 
<servlet-name>auEngine</servlet-name> 
<servlet-class>org.zkoss.zk.au.http.DHtmlUpdateServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
<servlet-name>auEngine</servlet-name> 
<url-pattern>/zkau/*</url-pattern> 
</servlet-mapping> 

<servlet> 
<servlet-name>zkportlet</servlet-name> 
<servlet-class>org.apache.pluto.core.PortletServlet</servlet-class> 
<init-param> 
<param-name>portlet-name</param-name> 
<param-value>zkportlet</param-value> 
</init-param> 
<load-on-startup>1</load-on-startup> 
</servlet>
 
<servlet-mapping> 
<servlet-name>zkportlet</servlet-name> 
<url-pattern>/PlutoInvoker/zkportlet</url-pattern> 
</servlet-mapping>
 
<session-config> 
<session-timeout>120</session-timeout> 
</session-config> 
 
<welcome-file-list> 
<welcome-file>index.zul</welcome-file> 
<welcome-file>index.zhtml</welcome-file> 
<welcome-file>index.html</welcome-file> 
<welcome-file>index.htm</welcome-file> 
</welcome-file-list> 
<security-role> 
<role-name>tomcat</role-name> 
</security-role> 
</web-app> 

2) portlet.xml

在portlet.xml中定義一個ZK portlet。

 <portlet-app 
xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd" 
version="1.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd 
http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"> 
 
 
<portlet> 
<description>ZKloader for ZUML pages</description> 
<portlet-name>zkportlet</portlet-name> 
<display-name>ZK Portlet Loader</display-name> 
<portlet-class>org.zkoss.zk.ui.http.DHtmlLayoutPortlet</portlet-class> 
<init-param> 
<name>zk_page</name> 
<value>/index.zul</value> 
</init-param> 
 
<expiration-cache>0</expiration-cache> 
 
<supports> 
<mime-type>text/html</mime-type> 
<portlet-mode>VIEW</portlet-mode> 
</supports> 
 
<supported-locale>en</supported-locale> 
 
<portlet-info> 
<title>ZK</title> 
<short-title>ZK</short-title> 
<keywords>ZK,ZUML</keywords> 
</portlet-info> 
 
<security-role-ref> 
<role-name>plutoTestRole</role-name> 
<role-link>tomcat</role-link> 
</security-role-ref> 
 
</portlet>  
</portlet-app> 

如何解決會話超時

[編輯 | 編輯原始碼]

此問題的原因是ZK無法從其會話中找到桌面。為什麼?ZK桌面儲存在Pluto的會話中,而不是ZK Web應用程式中,因為Pluto在Tomcat中進行跨上下文操作時將其會話傳遞給ZK Web應用程式。這違反了servlet的規範。到目前為止,還沒有好的解決方案。但這裡有一個解決方法,即ZK將桌面儲存在應用程式範圍內而不是會話範圍內,以避免此問題。請在您的zk.xml中新增以下行。

<system-config> 
   <cache-provider-class>org.zkoss.zk.ui.impl.GlobalDesktopCacheProvider</cache-provider-class> 
</system-config> 
華夏公益教科書