跳转到内容

ZK/入门指南/安装和配置

来自 Wikibooks,开放世界中的开放书籍

安装和配置

[编辑 | 编辑源代码]

在 Tomcat 上安装 ZK

1. 从 https://tomcat.net.cn 下载 Tomcat 并安装,如果您尚未安装。(已测试通过链接 https://127.0.0.1https://127.0.0.1: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://127.0.0.1/managerhttps://127.0.0.1:8080/manager 并将 demo/bin/zkdemo.war 部署到 Tomcat,或者直接将其复制到 $TOMCAT_HOME/webapps。如果您更喜欢直接复制,则必须先停止 Tomcat。如果文件丢失,请改为获取 zksandbox.war

7. 浏览到 https://127.0.0.1/zkdemo/userguidehttps://127.0.0.1:8080/zkdemo/userguidehttps://127.0.0.1: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://127.0.0.1/zkdemo/userguidehttps://127.0.0.1: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://127.0.0.1/zkdemo/userguidehttps://127.0.0.1:8080/zkdemo/userguide,具体取决于您的配置。

JBoss 4.0 及以上版本

[编辑 | 编辑源代码]

1. 从 http://www.jboss.com/downloads/index 下载 Jboss 并安装,如果您尚未安装。

2. 使用链接 https://127.0.0.1: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://127.0.0.1/zkdemo/userguidehttps://127.0.0.1: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://127.0.0.1:8888/em/

7. 以oc4jadmin身份登录并转到应用程序-->部署页面。

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

9. 浏览到https://127.0.0.1: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://127.0.0.1:9060/ibm/console/secure/logon.do以部署应用程序。
7.部署后,可以通过https://127.0.0.1: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://127.0.0.1/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> 
华夏公益教科书