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);