实践Java
Practice in Java
posts - 6,  comments - 20,  trackbacks - 0
 

      创建一个名为MyPortlet类继承至com.liferay.portlet.StrutsPortlet类.StrutsPortlet实现了Liferay的portlet规范,继承后只需覆盖感兴趣的方法即可,如下代码:

 

 1 package com.ext.portlet.myportlet;
 2 
 3 import com.liferay.portlet.StrutsPortlet;
 4 
 5 import java.io.IOException;
 6 
 7 import javax.portlet.PortletException;
 8 import javax.portlet.PortletPreferences;
 9 import javax.portlet.RenderRequest;
10 import javax.portlet.RenderResponse;
11 
12 /**
13  * <a href="ReportsPortlet.java.html"><b><i>View Source</i></b></a>
14  *
15  * @author Brian Wing Shun Chan
16  *
17  */
18 public class MyPortlet extends StrutsPortlet {
19  
20      public void doView( RenderRequest renderRequest, RenderResponse renderResponse)  throws IOException, PortletException {
21 
22           PortletPreferences prefs = renderRequest.getPreferences();
23 
24           System.out.println(prefs.getValue("param1""")); //测试一下配置的参数读取
25           super.doView(renderRequest, renderResponse);
26      }
27 
28 }
29 


 

  建立一个Struts的Action用于处理portlet的请求:

 1 package com.ext.portlet.myportlet.action;
 2 import java.util.ArrayList;
 3 import java.util.List;
 4 
 5 import javax.portlet.PortletConfig;
 6 import javax.portlet.RenderRequest;
 7 import javax.portlet.RenderResponse;
 8 import javax.portlet.WindowState; 
 9 import org.apache.struts.action.ActionForm;
10 import org.apache.struts.action.ActionForward;
11 import org.apache.struts.action.ActionMapping;
12 
13 import com.liferay.portal.struts.PortletAction;
14 public class ViewMyPortletAction  extends PortletAction {
15 
16     public ActionForward render(
17             ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
18             RenderRequest renderRequest, RenderResponse renderResponse)
19         throws Exception {
20 
21         //根据portlet的窗口变化Forward到不同的页面
22         if (renderRequest.getWindowState().equals(WindowState.NORMAL)) {
23             return mapping.findForward("portlet.ext.myportlet.view");
24         }
25         else {
26             List reports = new ArrayList(); 
27             //测试一下从Action到页面的对象传递
28             reports.add("");
29             reports.add("");
30             reports.add("");
31             reports.add("");
32             reports.add("");
33             renderRequest.setAttribute("myportlet", reports);
34 
35             return mapping.findForward("portlet.ext.myportlet.view_myportlet");
36         }
37     }
38 
39 }

配置一个portlet实例,在Ext工程下文件:/ext/ext-web/docroot/WEB-INF/portlet-ext.xml 添加如下配置:
 1 <portlet>
 2         <portlet-name>EXT_2</portlet-name>
 3         <display-name>MyPortlet</display-name>
 4         <portlet-class>com.ext.portlet.myportlet.MyPortlet</portlet-class><!-- 刚才建立的portlet处理对象 -->
 5         <init-param>
 6             <name>view-action</name>
 7             <value>/ext/myportlet/view_myportlet</value><!-- portal首页小窗口的指向路径 -->
 8         </init-param>
 9         <expiration-cache>0</expiration-cache>
10         <supports>
11             <mime-type>text/html</mime-type>
12         </supports>
13         <resource-bundle>com.liferay.portlet.StrutsResourceBundle</resource-bundle>
14         <portlet-preferences>
15             <preference>
16                 <name>param1</name><!-- 代码中要读的测试参数 -->
17                 <value>Mail</value>
18             </preference> 
19             <preference>
20                 <name>param2</name>
21                 <value>OA</value>
22             </preference> 
23         </portlet-preferences>
24         <security-role-ref>
25             <role-name>power-user</role-name>
26         </security-role-ref>
27         <security-role-ref>
28             <role-name>user</role-name>
29         </security-role-ref>
30     </portlet>    


/ext/ext-web/docroot/WEB-INF/liferay-portlet-ext.xml 文件的配置,增加如下
1 <portlet>
2         <portlet-name>EXT_2</portlet-name>
3         <struts-path>ext/myportlet</struts-path>
4         <use-default-template>false</use-default-template>
5     </portlet>


定义portlet控制面板中portlet的分组/ext/ext-web/docroot/WEB-INF/liferay-display.xml

1     <category name="category.sample">
2         <portlet id="47" />
3         <portlet id="48" />
4         <portlet id="50" />
5         <portlet id="66" />
6         <portlet id="EXT_1" />
7         <portlet id="EXT_2" /><!-- 增加到这个分组,可以任意指定组 -->
8     </category>

portlet页面与处理名称配置,在/ext/ext-web/docroot/WEB-INF/tiles-defs.xml文件下添加:
1 <definition name="portlet.ext.myportlet.view" extends="portlet">
2         <put name="portlet_content" value="/portlet/ext/myportlet/view.jsp" />
3     </definition>
4 
5     <definition name="portlet.ext.myportlet.view_myportlet" extends="portlet">
6         <put name="portlet_content" value="/portlet/ext/myportlet/view_myportlet.jsp" />
7     </definition>

处理页面portlet的StrutsAction配置 /ext/ext-web/docroot/WEB-INF/struts-config.xml

1 <action path="/ext/myportlet/view_myportlet" type="com.ext.portlet.myportlet.action.ViewMyPortletAction">
2             <forward name="portlet.ext.myportlet.view" path="portlet.ext.myportlet.view" />
3             <forward name="portlet.ext.myportlet.view_myportlet" path="portlet.ext.myportlet.view_myportlet" />
4         </action>

通过上面的简单配置,可以基本可以看出portlet在Liferay portlet容器中怎样配置的,也可以初步了解到portal容器怎样加载和初始化这些portlet的了,上述配置中有几个JSP页面这几个页面可以先用Ext工程自带的例子来创建这些页面文件,Liferay提供一些用于支持portal的标签.

在Ext工程目录中创建页面目录 /ext/ext-web/docroot/html/portlet/ext/myportlet 并增加如下页面文件,文件名必须和tiles-defs.xml文件中指定的对应.

init.jsp   
view_myportlet.jsp --打开portlet的显示页面
view.jsp                --在portal首页显示小窗口的页面

view.jsp内容
1 <%@ page contentType="text/html; charset=UTF-8"%>
2 <%@ include file="/html/portlet/ext/reports/init.jsp" %>
3 <href="<portlet:renderURL windowState="<%= WindowState.MAXIMIZED.toString() %>" />&myparam=Mail">邮件系统:<%= prefs.getValue("param1""none"%> </a>
4 <br>
5 <href="<portlet:renderURL windowState="<%= WindowState.MAXIMIZED.toString() %>" />&myparam=OA">办公系统:<%= prefs.getValue("param2""none"%> </a>
6 

windowState是portlet规范里内置参数,myparam是自定义参数,用于做测试.



编辑完后使用ANT部署,然后启动Tomcat,将看到刚才创建的portlet已经成功部署到应用当中





注意:在配置portlet的时候我遇到了配置参数被写入数据库了,在测试的时候配置参数与显示出来老不能同步,我直接从数据库表中给D掉了,目前还没研究这个部署的详细问题!
OK!!第一个例子成功了!
posted on 2009-03-10 10:06 弦惊塞外 阅读(1399) 评论(7)  编辑  收藏

FeedBack:
# re: Liferay Portal学习
2009-06-23 13:05 | 沙暖睡鸳鸯
请问为什么我的页面上“邮件系统”,“办公系统”显示乱码啊,我用的是5.2.3  回复  更多评论
  
# re: Liferay Portal学习 [未登录]
2009-07-02 14:19 | 弦惊塞外
@沙暖睡鸳鸯


页面的字符集设置问题吧  回复  更多评论
  
# re: Liferay Portal学习
2009-09-01 10:11 | 彩霞
为什么我启动tomcat时有错误  回复  更多评论
  
# re: Liferay Portal学习
2010-02-25 17:22 | wt
<%= prefs.getValue("param1", "none") %>
我的prefs怎么无法识别啊,其余的和你的都一样  回复  更多评论
  
# re: Liferay Portal学习
2010-06-01 13:36 | cf_yang
@wt
需要修改init.jsp
PortletPreferences preferences = renderRequest.getPreferences();
将preferences改为prefs  回复  更多评论
  
# re: Liferay Portal学习
2010-06-01 13:41 | cf_yang
@彩霞
我也出现了你描述的错误.找了好多资料,才发现需修改portlet-ext.xml
将自带portlet例子EXT_1中下面一行不要换行,一行显示
<resource-bundle>com.liferay.portlet.StrutsResourceBundle</resource-bundle>
可能是liferay的一个bug.
你试一下看可以不.
  回复  更多评论
  
# re: Liferay Portal学习
2010-09-02 15:59 | 秋天的童话
@沙暖睡鸳鸯
你把jsp 页面编码为UTF-8 就ok  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
 

<2010年9月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

常用链接

留言簿(3)

随笔档案

相册

搜索

  •  

积分与排名

  • 积分 - 6119
  • 排名 - 2850

最新评论

阅读排行榜

评论排行榜