liferay的稍微复杂的一个portlet实例

一、实例

这里我们采用portal里面代码规范生成机制。对于持久化层和服务层的类都可以自动产生。

我们的portlet功能很简单就是从数据库里面一个表中获取数据,并在页面上显示。

建立业务数据表

在数据库里面新建一个表users,字段userid(varcher),username(varcher),password(varcher).并往表中插入几个条数据。

建立代码模板配置文件

(1)建立service.xml文件

在ext\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="userid" type="String" primary="true" />
<!-- Audit fields -->
<column name="username" type="String" />
<column name="password" type="String" />
<!-- Order -->
<order by="asc">
<order-column name="username" case-sensitive="false" />
</order>
</entity>
<exceptions>
<exception>UsersEntry</exception>
</exceptions>
</service-builder>
<!--package-path是指我们即将建立portlet的上级目录-->
<!-- portlet name就是我们新建文件夹名称users,short-name没有作研究不太清楚使用途径-->
<!--entity name 是和我们即将建立的和数据库表a_user一一对应实体的类名,可以和数据库表名不同,
<!--但为方便起见一般和表名保持一致-->

(2)修改ant文件,增加ant任务

建好service.xml文件后,我们在ext-impl目录下打开build-perent.xml 在

<target name="build-service">
…….
</target>

下面添加任务

<target name="build-service-portlet-users">
<antcall target="build-service">
<param name="service.file" value="src/com/ext/portlet/users/service.xml" />
</antcall>
</target>

然后在myexlipse的ant视图里面打开ext-impl目录下的build.xml执行build-service-portlet-user任务。

我们发现在ext-impl\src\com\ext\portlet\users , ext-service\src\com\ext\portlet\users

下面多了几个目录和文件。这是都是系统自动产生的hibernate的实体类和持久化类。

如果我们再细心些也可发现在ext-impl\src\META-INF目录下配置文件都多些内容。

系统已经自动将对应的实体类、持久化类、工具类等配置为相应的javabean、util、service等。

无疑节省了很多时间,而且减少我们人工配置的错误。

打开ext-impl\src\META-INF\ext-hbm.xml,把<class name="com.ext.portlet.users.model.impl.UsersEntryImpl" table="UsersEntry">改为<class name="com.ext.portlet.users.model.impl.UsersEntryImpl" table="Users">

时间: 2024-08-04 12:22:30

liferay的稍微复杂的一个portlet实例的相关文章

一个密码学实例

分享一个密码学实例: 假设我们的主角是Alice和Bob,他们准备一同出去吃饭,但就去哪家餐厅并没有达成共识.此时通常的解决方法是猜拳.投硬币之类的手段来决定选择谁的方案.通常这种方式也算公平.合理,就像足球场上的掷币一样(概率是一半一半). 但同样的事情如果环境变化了,这样的手段可能就会失灵.比如Alice通过电话或网络约Bob一同就餐,如果他们没有共同喜欢的餐厅的话,此时仍然采用猜拳亦或是投硬币的方式很显然是不合适的.因为这里面可能会出现作弊,并没有公证人可以公证真相!现代网络数据的传输有着

Python实现保证只能运行一个脚本实例

  这篇文章主要介绍了Python实现保证只能运行一个脚本实例,本文直接给出实现代码,需要的朋友可以参考下 保证只能运行一个脚本实例,方法是程序运行时监听一个特定端口,如果失败则说明已经有实例在跑. 使用装饰器实现,便于重用 代码如下: import functools def just_one_instance(func): ''' 装饰器 如果已经有实例在跑则退出 复制代码 代码如下: :return: ''' @functools.wraps(func) def f(*args,**kwa

python通过定义一个类实例作为ftp回调方法

  本文实例讲述了python通过定义一个类实例作为ftp回调方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 class Writer: def __init__(self, file): self.f = open(file, "w") def __call__(self, data): self.f.write(data) self.f.write('n') print data FILENAME = "AutoI

用Python程序抓取网页的HTML信息的一个小实例

  这篇文章主要介绍了用Python程序抓取网页的HTML信息的一个小实例,用到的方法同时也是用Python编写爬虫的基础,需要的朋友可以参考下 抓取网页数据的思路有好多种,一般有:直接代码请求http.模拟浏览器请求数据(通常需要登录验证).控制浏览器实现数据抓取等.这篇不考虑复杂情况,放一个读取简单网页数据的小例子: 目标数据 将ittf网站上这个页面上所有这些选手的超链接保存下来. 数据请求 真的很喜欢符合人类思维的库,比如requests,如果是要直接拿网页文本,一句话搞定: ? 1 d

刚创建了一个EC2实例,默认登录不是root,请问怎么切换到root啊,创建的时候没告诉密码啊。

问题描述 刚创建了一个EC2实例,默认登录不是root,请问怎么切换到root啊,创建的时候没告诉密码啊. 解决方案 解决方案二:root是不能登录的,需要root操作的时候,直接sudo就行了解决方案三:可以直接设置root密码sudopasswdroot解决方案四:用pem文件登录后,运行:sudosu-这样就切换到了root下,如果以后想直接用root登录,可以参看这篇文章:http://www.mindg.cn/?p=269

java spring注入bean生成一个类实例,请问这个类实例是单体类吗?全局唯一吗。

问题描述 java spring注入bean生成一个类实例,请问这个类实例是单体类吗?全局唯一吗. 小弟刚从C++转JAVA不久,遇到这样一个问题,求高人帮忙解答. 我现在大体理解了注入的实现方式,例如在一个标注有@configuration 的类里面,如果一个方法 上面有@bean,那么这个方法的返回的类对象会被实例化. 我的疑问是这样的,这个实例化的对象是全局唯一的吗,或者说 是一个单体类吗? 因为我要在我的程序里不同地方使用调用这个bean的方法,我担心如果是单体类的话, 是否存在数据同步

《ANSYS FLUENT 16.0超级学习手册》——2.6 FLUENT的一个简单实例

2.6 FLUENT的一个简单实例 1.网格导入与处理 (1)在"开始"程序菜单中运行FLUENT主程序,出现FLUENT Launcher对话框,选择3D,其他保持默认设置,单击OK按钮进入FLUENT界面,读入网格文件jointpipe.msh,如图2-33所示. (2)检查网格文件.单击General面板中的Check按钮,如图2-34所示,对网格进行检查.需保证网格最小单元体积minimum volume不小于0,即没有负体积网格. (3)设置网格区域尺寸.单击General面

cxf-用Ant构造第一个CXF实例

问题描述 用Ant构造第一个CXF实例 用Ant构造第一个CXF实例就出错,错误内容如图,求大神解决! 解决方案 自己结贴: 找到上面写的common_build.xml的75行.然后往上找几行,就发现它只识别1.5和1.6版本的java,复制多几个标签,改成自己的版本.我直接加多了1.7和1.8版本

java 画一个曲线实例代码(二款jsp绘制曲线实例)(1/2)

java 画一个曲线实例代码(二款网页特效phttp://www.111cn.net/网页特效p.html target=_blank >jsp教程绘制曲线实例) /* 参数名 描 述  画出模式 必需的: 整数型.参数值可以为以下常量: 6912.#点,将画出的多边形显示为点: 6913.#线,将画出的多边形显示为线段:   曲线起点 必需的: 整数型.参数值应该介于 0 和"设置曲线等分点"命令中的"u向等分数"之间.  曲线终点 必需的: 整数型.参数值