《liferay_portlet开发简单说明》由会员分享,可在线阅读,更多相关《liferay_portlet开发简单说明(34页珍藏版)》请在金锄头文库上搜索。
1、Liferay Portlet 开发简单说明我们看到无论是 portal 和 ext 工程,目录都很繁杂,其实我们只要关注 3 个目录就够了。portal 里面的 ext-implsrc,ext-servicesrc 和 portal-web。ext-implsrc,ext-servicesrc 是 portal 工程已经实现的所有 portlet 的 java 代码和部分资源文件.ext-web 目录是放置网页文件和 portal 的配置文件。ext 工程对应目录是 ext-implsrc,ext-servicesrc 和 portal-web。ext-implsrc,ext-service
2、src 和 portal-web。是放置我们自己开发的 portlet 的 java 代码。ext-web 是自己开发 portlet 对应的网页文件和配置文件。下面我们来新建一个自己 portlet。这里我们采用 portal 里面代码规范生成机制。对于持久化层和服务层的类都可以自动产生。我们的 portlet 功能很简单就是从数据库里面一个表中获取数据,并在页面上显示。建立业务数据表在数据库里面新建一个表 users,字段 userid,username,password.并往表中插入几个条数据。建立代码模板配置文件(1)建立 service.xml 文件在 ext-implsrccome
3、xtportlet 新建一个目录 users,在目录下建立一个 service.xml 文件文件内容为:UsersUsersEntry(2)修改 ant 文件,增加 ant 任务建好 service.xml 文件后,我们在 ext-impl 目录下打开 build-perent.xml 在.下面添加任务然后在 myexlipse 的 ant 视图里面打开 ext-impl 目录下的 build.xml 执行 build-service-portlet-user 任务。我们发现在 ext-implsrccomextportletusers , ext-servicesrccomextportle
4、tusers下面多了几个目录和文件。这是都是系统自动产生的 hibernate 的实体类和持久化类。如果我们再细心些也可发现在 ext-implsrcMETA-INF 目录下配置文件都多些内容。系统已经自动将对应的实体类、持久化类、工具类等配置为相应的 javabean、util、service 等。无疑节省了很多时间,而且减少我们人工配置的错误。业务实现编码现在我们要实现一个查询功能,将数据库中表名 users 中所有记录的 username 查询出来,并显示在前台。打开ext-servicesrccomextportletusersservice 下 UsersEntryService 文
5、件,建立一个名为 getAllUsers的抽象方法;public List getAllUsers() throws SystemException;在ext-implsrccomextportletusersserviceimplUsersEntryServiceImpl.java 中实现它.public List getAllUsers() throws SystemException return UsersEntryUtil.findAll();同样 spring 的 service 层 也是通过辅助类作为对外唯一入口,所以在 UsersEntryServiceUtil 里面增加一个方
6、法 getAllUsers 作为 service 层的方法 getAllUsers 的入口。public static List getAllUsers() throws SystemExceptionreturn _service.getAllUsers();需要注意的是 service 层接口对应具体实现是由工厂类指定。他们捆绑关系可以查看 spring 配置文件信息。在执行 ant 的 build-service-portlet-usertest 任务已经完成了。在srccomextportletusersaction 目录下建立一个 ViewUserAction.java 文件,完成响
7、应客户端请求。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.po
8、rtlet.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 rend
9、er(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 Ar
10、rayList();for (int i = 0; i 建立 view.jsp 文件: /MyUser该 jsp 内容是显示默认的初始用户名。具体值从初始化配置参数里获取。建立 view_users.jspsize : .该 jsp 页面目的是展示所有从数据库里面取出来的用户名。Ok,完成以上工作后,我们整个 portlet 编码工作已经宣告结束,接下来的是配置 portlet参数工作。Portlet 的配置:是 portlet 配置信息文件存放 ext-webdocrootWEB-INF 目录下,在 portlet-ext.xml 文件里面添加EXT_UsersUserscom.ext.po
11、rtlet.users.UsersPortletview-action/ext/users/view_users0 text/htmlcom.liferay.portlet.StrutsResourceBundletestpower-useruser必须唯一,不得已有 portlet 名字冲突。 也必须唯一。指向我们的建立 portlet 类。view-action里面值是指 view 这个 action 对应的 actionurl。里面参数值是提供给这个 portlet 使用的参数初始值。这里配置是指 portlet 里面使用到参数名 user 的值是 jack。如 portlet 不需要初
12、始值参数,则该项不需要配置。在 liferay-portlet-ext.xml 文件里面添加EXT_Usersext/usersfalse的值必须和 portlet-ext.xml 文件里面值一致。在 liferay-display。Xml 文件节点下面添加id 必须和 portlet-ext 里面的一致。在 struts-config.xml 文件里面添加内容:就是说,当前台提交一个 actionUrl 为/ext/users/view_users 请求的时候,由 ViewUsersAction 负责处理这个action 操作。后面 2 个 forward 指的是在 ViewUsersAct
13、ion 定向返回请求目标页面。return mapping.findForward(portlet.ext.users.view);return mapping.findForward(portlet.ext.users.view_users);Comment u1: 这个有问题对应的应该是 portlet.ext.users.view_usersComment u2: 这个应该是portlet/ext/users/view_users.jsp findForward的值为避免与其他 findForward值冲突,一般将包名也带上,保证不会重名。在 tiles-defs.xml文件里面添加内容
14、:该 name的值即随同 struct-config.xml配置信息里面 forward参数 path值对应的,指向真正的目标页面。最后我们在ext-implsrccontent 目录下 Language-ext.properties文件里面增加内容:javax.portlet.title.EXT_Users=Usersview-users=View Users即 portlet显示出来时候,在 portlet上面标题信息。大家在 Liferay的二次开发的过程中,可能都觉得部署起来太麻烦,都需要 ant deploy,然后重新启动 Tomcat才能生效。特别是连修改 JSP都需要这么做。做了
15、一个简单的尝试,在一定程度上解决自动部署的问题。利用的是 Eclipse的 Builder机制。因为没有花多少时间,所以适应性也就比较差,只适用于 Tomcat服务器。大家可以简单修改一下,以适应其他服务器。11.1 写 XML文件在 ext根目录下,创建一个 XML文件 liferay-ext-increament-deploy.xml。内容为:11.2 为 ext项目添加 builder1、 在 ext项目上右键单击,选择 Properties2、 弹出窗口中,选中“Builders”3、 右边窗口中,缺省有“Java Bulder”存在。单击“New”按钮,并选择 “Ant Build”
16、4、 在弹出窗口中,Name 框输入 LiferayExtIncreamentDeploy5、 Main 这个 Tab 中Buildfile 输入$workspace_loc:/ext/liferay-ext-increament-deploy.xmlBase Directory 输入 $workspace_loc:/ext6、 在 Targets Tab 中,Auto Bulder 选择”deploy”任务7、 在 Build Options Tab 中,选中 “Specify working set of relevant resources”,并单击“Specify Resources“,在弹出窗口中选中 extext-ejbsrc 和 extext-webdocroothtml 这两个目录。8、 如果不想每次看到 deploy 过程,