`
yjgyjg4
  • 浏览: 118971 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

portal 學習筆記

阅读更多
从获取的资料中发现有两种方式开发一个自己的portlet。目前,我们搭建了ext的开发环境,所以现在用的是ext的开发方式,对于另外一种开发方式未做实验。
下面是一个小例子:
我们新建的portlet都在ext这个目录下
其中ext-impl\src,ext-service\src是portal工程已经实现的所有portlet的java代码和部分资源文件.
ext-web目录是放置网页文件和portal的配置文件。
采用portal里面代码规范生成机制,对于持久化层和服务层的类都可以自动产生,方便,而且规范,这个应该可以提高开发效率。
在数据库里面新建一个表users,字段id,userName,userAddress并往表中插入几个条数据,用于测试。
    采用代码规范生成机制,需要使用到ant里面的命令,当然portal里面已经为我们扩展,我们只需要建立相对应的ant命令和xml文件即可。
1. 在ext-impl\src\com\ext\portlet 新建一个目录users,在目录下在这里建立一个service.xml文件,内容为:
<?xml version="1.0"?>
<!DOCTYPE service-builder PUBLIC "-//Liferay//DTD Service Builder 5.1.0//EN" "http://www.liferay.com/dtd/liferay-service-
builder_5_1_0.dtd">
<service-builder package-path="com.ext.portlet.users">
 <namespace>Users</namespace>
 <entity name="UsersEntry" local-service="false" remote-service="true" persistence-
class="com.ext.portlet.users.service.persistence.UsersEntryPersistenceImpl">
  <!-- PK fields -->
  <column name="id" type="Integer" primary="true" />
  <!-- Audit fields -->
  <column name="userName" type="String" />
  <column name="userAddress" type="String" />
  <!-- Order -->
  <order by="asc">
   <order-column name="userName" case-sensitive="false" />
  </order>
 </entity>
 <exceptions>
  <exception> UsersEntry </exception>
 </exceptions>
</service-builder>

注意:以上内容需要和数据表相对应,不然生成的java文件,否则需要我们手动去修改一些内容,生成好后检查下ORM映射文件的名称是否对应。
此时需要建立ant命令,来自动生成我们需要的文件。在ext-impl目录下build-perent.xml文件中添加任务:
<target name="build-service-portlet-users">
 <antcall target="build-service">
  <param name="service.file" value="src/com/ext/portlet/users/service.xml" />
 </antcall>
</target>

添加后我们运行此build-service-portlet-users任务,运行后在ext-impl\src\com\ext\portlet\users , ext-service\src\com\ext\portlet\users
下面是portal自动生成的文件,在ext-impl\src\META-INF目录下配置文件也会多了些内容.
2. 接下来需要添加我们需要的方法:
在\ext-service\src\com\ext\portlet\users\service下UsersEntryService文件,建立一个名为getAllUsers()方法;
public List getAllUsers() throws SystemException;
在\ext-impl\src\com\ext\portlet\users\service\impl\UsersEntryServiceImpl.java中实现它.
public List getAllUsers() throws SystemException {
return UsersEntryUtil.findAll();
}
这里也用到了spring的配置,且自动生成的时候已经为我们自动为我们注入了需要的依赖类。
在UsersEntryServiceUtil里面增加一个方法:
public static List getAllUsers() throws SystemException{
     return _service.getAllUsers();
}
3. 在\src\com\ext\portlet\users\action目录下建立一个ViewUserAction.java文件,完成响应客户端请求。
package com.ext.portlet.users.action;

import com.ext.portlet.users.model.UsersEntryModel;
import com.ext.portlet.users.service.UsersEntryServiceUtil;
import com.liferay.portal.struts.PortletAction;

import java.util.ArrayList;
import java.util.List;

import javax.portlet.PortletConfig;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import javax.portlet.WindowState;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class ViewUsersAction extends PortletAction {

	public ActionForward render(ActionMapping mapping, ActionForm form,
			PortletConfig config, RenderRequest req, RenderResponse res)
			throws Exception {

		if (req.getWindowState().equals(WindowState.NORMAL)) {

			return mapping.findForward("portlet.ext.users.view");

		} else {

			List users = UsersEntryServiceUtil.getAllUsers();
			List usernames = new ArrayList();
			
//			usernames.add("1111");
//			usernames.add("2222");
			for (int i = 0; i < users.size(); i++) {
				usernames.add(((UsersEntryModel) users.get(i)).getUserName());
			}
			req.setAttribute("users", usernames);
			req.setAttribute("count", "" + users.size());

			return mapping.findForward("portlet.ext.users.view_users");
		}
	}

}

4. 然后在\ext-impl\src\com\ext\portlet\users下面新建文件UsersPortlet.java
package com.ext.portlet.users; 

import com.liferay.portlet.StrutsPortlet; 
import java.io.IOException; 
import javax.portlet.PortletException; 
import javax.portlet.PortletPreferences; 
import javax.portlet.RenderRequest; 
import javax.portlet.RenderResponse; 

public class UsersPortlet extends StrutsPortlet { 

public void doView( 
   RenderRequest renderRequest, RenderResponse renderResponse) 
  throws IOException, PortletException { 

  PortletPreferences prefs = renderRequest.getPreferences(); 

  System.out.println("--userportlet.java------"+prefs.getValue("test", "")); 

  super.doView(renderRequest, renderResponse); 
} 
} 

5. 然后建立用于显示的jsp文件:
在 \ext-web\docroot\html\portlet\ext目录下建立目录users,并在users目录下建立init.jsp文件添加以下内容:<%@ include file="/html/common/init.jsp" %>
<portlet:defineObjects />
<% PortletPreferences prefs = renderRequest.getPreferences(); %>
6. 建立view.jsp文件:
<%@ include file="/html/portlet/ext/users/init.jsp" %>
<a href="<portlet:renderURL windowState="<%= WindowState.MAXIMIZED.toString() %>" />">
MyUser
<%= prefs.getValue("user", "") %>
</a>
该jsp内容是显示默认的初始用户名。具体值从初始化配置参数里获取,即对应portlet-ext.xml文件中的内容<init-param>
  <name>view-action</name>
  <value>/ext/users/view_users</value>
</init-param>
7. 建立view_users.jsp
<%@ include file="/html/portlet/ext/users/init.jsp" %>
<% List reports = (List)request.getAttribute("users");%>
<% String count = (String)request.getAttribute("count");%>
size : <%=count %>.<br/>
<%
for (int i = 0; i < reports.size(); i++) {
 String reportName = (String)reports.get(i);
%>
<%= reportName %><br>
<%
}
%>
该jsp页面用于显示数据库中的数据。
8. 现在需要添加配置文件信息在\ext-web\docroot\WEB-INF目录下,portlet-ext.xml文件里面添加:
<portlet>
 <portlet-name>EXT_Users</portlet-name>
 <display-name>Users</display-name>
 <portlet-class>com.ext.portlet.users.UsersPortlet</portlet-class>
 <init-param>
  <name>view-action</name>
  <value>/ext/users/view_users</value>
 </init-param>
 <expiration-cache>0</expiration-cache>
 <supports>
  <mime-type>text/html</mime-type>
 </supports>
 <resource-bundle>com.liferay.portlet.StrutsResourceBundle</resource-bundle>
 <portlet-preferences>
  <preference>
   <name>test</name>
   <value></value>
  </preference>
 </portlet-preferences>
 <security-role-ref>
  <role-name>power-user</role-name>
 </security-role-ref>
 <security-role-ref>
  <role-name>user</role-name>
 </security-role-ref>
</portlet>

9. 在liferay-portlet-ext.xml文件里面添加
<portlet>
 <portlet-name>EXT_Users</portlet-name>
 <struts-path>ext/users</struts-path>
 <use-default-template>false</use-default-template>
</portlet>

<portlet-name>的值必须和portlet-ext.xml文件里面<portlet-name>值一致。

10. 在liferay-display。Xml文件节点<category name="category.test">
下面添加:
<portlet id="EXT_Users" /> id必须和portlet-ext里面的<portlet-name>一致。
11.在struts-config.xml文件里面添加内容:
<action path="/ext/users/view_users" type="com.ext.portlet.users.action.ViewUsersAction">
 <forward name="portlet.ext.users.view" path="portlet.ext.users.view" />
 <forward name="portlet.ext.users.view_users" path="portlet.ext.users.view_users" />
</action>

12. 在tiles-defs.xml文件里面添加内容:
<definition name="portlet.ext.reports.view_reports" extends="portlet">
 <put name="portlet_content" value="/portlet/ext/reports/view_reports.jsp" />
</definition>
 
<definition name="portlet.ext.users.view" extends="portlet">
 <put name="portlet_content" value="/portlet/ext/users/view.jsp" />
</definition>
该name的值即随同struct-config.xml配置信息里面forward参数path值对应的,指向真正的目标页面。
13. 最后在\ext-impl\src\content目录下Language-ext.properties文件里面增加内容:
javax.portlet.title.EXT_Users=Users
view-users=View Users
即portlet显示出来时候,在portlet上面标题信息

那jspPortlet和strutsPortlet 有什麽區別了,應該可以這樣理解jsp portlet就是sevlet jsp程序,struts Portlet 就是struts程序,不過portal中可不是簡單的使用struts
分享到:
评论

相关推荐

    Portal学习笔记

    【 Portal 学习笔记】 Portal 是一种基于Web的应用程序,最初源自互联网的“门户网站”,如雅虎和搜狐,提供用户访问各类信息的集中入口。随着技术的发展,Portal 概念被引入企业应用,用于整合信息、应用和服务,...

    portal学习笔记

    【标题】:“Portal学习笔记” 【描述】:“WEBSPHERE portal学习笔记” 【知识点详解】: 1. Portal基础 Portal最初源于互联网,指的是人们上网时首选的网站,如雅虎和搜狐,它集成了各类信息资源,方便用户...

    portal 学习笔记

    【标题】:“Liferay Portal学习笔记——JSR286事件机制详解” 【描述】:这篇笔记主要聚焦在Liferay Portal中的JSR286规范,特别是关于IPC(Inter-Portlet Communication)中的事件处理机制。 【标签】:“protal...

    portal学习笔记.doc

    【 Portal 概念详解】 Portal 一词源于互联网发展初期,最初指的是人们上网时首选访问的网站,如雅虎和搜狐等,它们是信息的集散地,整合了各种资源,便于用户一站式获取所需信息。随着企业信息化的发展,Portal 的...

    portal学习笔记(1)

    ### IBM Portal 设置与管理知识点详解 #### 一、IBM Portal 页面构建原理 IBM Portal 是一款功能强大的企业级门户平台,其提供了丰富的自定义选项来满足不同的业务需求。本章节主要介绍如何通过修改特定目录下的...

    Liferay_Portal_6学习之路-学习笔记完整版

    ### Liferay Portal 6 学习之路:全面解析与实践指南 #### 一、Portal与Liferay Portal简介 ##### Portal概念 Portal,即门户网站,...希望本篇学习笔记能够帮助大家更好地理解和掌握 Liferay Portal 6 的相关知识。

    荷露叮咚Liferay Portal 6学习笔记完整版.

    学习Liferay Portal不仅涉及到对Portal和Portlet概念的理解,还包括实际安装配置、开发环境的搭建和具体的编码实践。开发者在掌握这些知识点后,可以更有效地利用Liferay Portal平台来开发满足企业需求的应用系统。

    EPLAN学习笔记-常用操作步骤

    这些操作步骤覆盖了EPLAN软件中从基础元素创建到复杂系统设计的多个方面,是学习和使用EPLAN过程中非常重要的实践指南。通过熟练掌握这些步骤,用户可以高效地进行电气工程的设计和文档编制工作。

    liferay vm

    1. **Liferay Portal学习笔记之(五):开发主题风格theme**:这篇文章可能介绍了如何在Liferay中创建和修改主题,包括选择合适的主题框架,编辑CSS和图片资源,以及理解Liferay中的主题层次结构,以实现定制化的...

    Portal门户开发笔记

    IBM WebSphere Portal是一款强大的企业级门户平台,用于构建和管理高度可定制的、集成了多种应用和服务的用户入口。...无论是新手还是经验丰富的开发者,都可以通过这个笔记深入学习和提升自己的技能。

    北京西门子学习笔记整理

    这些学习笔记针对初学者,旨在提供一个全面的、易于理解的入门指南,帮助读者掌握西门子自动化系统的精髓。 首先,我们从“西门子”这个词出发,西门子是一家全球领先的科技公司,其在自动化和数字化解决方案方面...

    liferay学习笔记1

    以下是对“Liferay学习笔记1”的详细解释和相关知识点的深入探讨: ### Liferay概述 Liferay是一款开源的企业级门户平台,它提供了一个强大的框架,用于构建企业级应用程序和服务。Liferay的核心功能包括内容管理...

    尚硅谷vue3的学习笔记

    "尚硅谷vue3的学习笔记"很可能是记录了关于Vue3的详细学习过程,包括其核心概念、新特性、最佳实践以及常见问题的解决方法。 Vue3 的主要改进点包括: 1. **Composition API**:Vue3 引入了Composition API,这是...

    JAVA 五年的工作经验和学习笔记

    由于本人目前允许上传的资源太小,所以无法上传整个的技术学习笔记(JAVA 五年的工作经验和学习笔记),待以后有机会会分享给大家。 技术体系包括: J2SE/J2ME/J2EE/JAVA代码优化/Flex(BlazeDS、PureMVC等技术)...

    Liferay6 官方培训学习笔记

    ### Liferay6官方培训学习笔记:开发环境搭建与数据库配置详解 #### 一、开发环境搭建 Liferay是一款基于Java的开源企业级门户框架,它提供了丰富的功能和强大的定制能力,适用于构建各种复杂的Web应用程序。在...

    JWT学习笔记1

    1. Portal端在跳转前先调用更新Token的接口,获取带Token的URL,再由前端进行跳转。 2. 目标端(如Alpha)从URL中提取Token,通过校验接口验证Token,通过后更新用户信息。 JWT的优势 1. 数据量小,传输速度快,...

    人人学IoT———第二章学习笔记

    IoT平台,能力开放 2.1解锁物联网平台,与OceanConnect相识 物联网平台面临挑战。 第一个挑战:新业务上线周期长 只能接入自己的平台、应用碎片化严重、产品开发周期长、产品上市慢等 第二个挑战:标准不同一、集成...

Global site tag (gtag.js) - Google Analytics