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文件即可。
[color=red][b]1.[/b][/color] 在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目录下配置文件也会多了些内容.
[color=red][b]2.[/b][/color] 接下来需要添加我们需要的方法:
在\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();
}
[color=red][b]3.[/b][/color] 在\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");
}
}

}

[color=red][b]4. [/b][/color]然后在\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);
}
}

[color=red][b]5.[/b][/color] 然后建立用于显示的jsp文件:
在 \ext-web\docroot\html\portlet\ext目录下建立目录users,并在users目录下建立init.jsp文件添加以下内容:<%@ include file="/html/common/init.jsp" %>
<portlet:defineObjects />
<% PortletPreferences prefs = renderRequest.getPreferences(); %>
[color=red][b]6. [/b][/color]建立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>
[color=red][b]7.[/b][/color] 建立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页面用于显示数据库中的数据。
[color=red][b]8.[/b][/color] 现在需要添加配置文件信息在\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>

[color=red][b]9.[/b][/color] 在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>值一致。

[color=red][b]10.[/b][/color] 在liferay-display。Xml文件节点<category name="category.test">
下面添加:
<portlet id="EXT_Users" /> id必须和portlet-ext里面的<portlet-name>一致。
[color=red][b]11.[/b][/color]在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>

[color=red][b]12.[/b][/color] 在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值对应的,指向真正的目标页面。
[color=red][b]13.[/b][/color] 最后在\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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值