Portlet各类资料

  • 格式:doc
  • 大小:134.00 KB
  • 文档页数:19

据不完全统计,在开发web应用的时候每次重启web服务器每天每个程序员所花费的时候可以按小时计算。

每次等服务器启动都不是一件愉快的经历。

使用javarebel可以动态加载修改的类,不用每次重启web服务器。

 安装

1 下载javarebel /javarebel/

2 修改jvm参数

 测试

checkpoint 1:控制台

checkpoint 2: 动态加载

以helloword portlet演示一下效果

找到显示内容的代码 HelloWorldPortlet 并修改

保存 编译代码 控制台显示重新加载类

JavaRebel: Reloading class 'com.liferay.portlet.helloworld.HelloWorldPortlet'. 刷新页面动态加载成功

1. 安装JDK,

2. 安装ANT,

3. 启动Tomcat,

4. 下载liferay-plugins-sdk-5.2.2.zip并解压,假定解压目录为plugin_home

5. 在plugin_home目录中创建文件ername.properties,其中username是你的机器名,

添加一行:

app.server.dir=G:/tomcat-6.0.18

设置app.server.dir为你的Tomcat目录

6. 打开控制台窗口,cd到plugin_home/portlets目录,执行create sample-permission “sample

permission”命令,创建一个空的portlet,

7. cd 到plugin_home/portlets/sample-permission-portlet,执行ant deploy,部署刚创建的portlet

8. 在plugin_home/portlets/sample-permission-portlet/docroot/META-INF中创建文件context.xml,添加:

loaderClass="com.liferay.support.tomcat.loader.PortalClassLoader" />

这个配置允许portlet使用Portal的Class Loader,使得portet即使不添加jar包,也可以访问核心类的能力。

复制context.xml到TOMCAT_HOME/webapps/sample-permission-portlet/META-INF目录中, 重新启动TOMCAT

9. 参考示例在plugin_home/portlets/sample-permission-portlet/docroot/WEB-INF 中创建service.xml文件,

10.执行ant build-service

11.参考示例在src目录中的ProductServiceImpl.java和ProductLocalServiceImpl.java中加入自己的业务逻辑方法,再次执行ant build-service

12.参考示例,在plugin_home/portlets/sample-permission-portlet/docroot/WEB-INF/src

/resource-actions中创建default.xml文件,定义portlet权限。

13. 参考示例,在plugin_home/portlets/sample-permission-portlet/docroot/WEB-INF/src中创建portlet.properties,添加:

resource.actions.configs=resource-actions/default.xml

指定权限文件的位置。

14.参考示例编辑web.xml和portlet.xml

15.参考示例编辑liferay-portlet.xml文件,添加 product

表示struts-path对portlet是可见的

15.复制示例中jsp文件、struts-config.xml、tiles-defs.xml、c-rt.tld 、EditProductAction.java到对应目录中。

16.执行ant deploy,重新部署portlet。

权限开发关键步骤:

1. 定义权限,参考default.xml文件:

sample-permission

ADD_PRODUCT

CONFIGURATION

VIEW

VIEW

VIEW

com.chinaedu.permission.model.Product

sample-permission

DELETE

PERMISSIONS

UPDATE

VIEW

DELETE

2 .添加Resource,参考ProductLocalServiceImpl.java,

resourceLocalService.addModelResources(product.getCompanyId(), product .getGroupId(), product.getUserId(), Product.class.getName(),

product.getProductId(), communityPermissions, guestPermissions);

删除Resource,参考ProductLocalServiceImpl.java,

resourceLocalService.deleteResource(product.getCompanyId(),

Product.class.getName(), ResourceConstants.SCOPE_INDIVIDUAL,

product.getProductId());

3.提供添加permission的入口,参考product_action.jspf,

modelResource="<%= modelName %>"

modelResourceDescription="<%= product.getDescription()%>"

resourcePrimKey="<%= productId %>"

var="permissionsEntryURL"

/>

4.检查权限:

l 表现层页面检查权限,参考product_action.jspf

var="editEntryURL">

l 后台服务层检查权限,参考ProductServiceImpl.java

if (getPermissionChecker().hasPermission(product.getGroupId(),

Product.class.getName(), productId, "DELETE"))

productLocalService.deleteProduct(productId);

Liferay自己处理页面的跳转,比如:匿名用户如何跳转到缺省的guest页面,登录用户Session会话失效后如何跳转等。

23.1 源代码分析

对于页面的跳转,基本上是在文件com.liferay.portal.events.ServicePreAction中处理的。主要代码,添了点注释:

long plid = ParamUtil.getLong(req, "p_l_id");

if (plid > 0) { // 判断是否指定了要访问的layout的id

try {

layout = LayoutLocalServiceUtil.getLayout(plid);

if (!signedIn &&

GetterUtil.getBoolean(PropsUtil.get(

PropsUtil.AUTH_FORWARD_BY_REDIRECT))) {

req.setAttribute(WebKeys.REQUESTED_LAYOUT, layout);