`
hu437
  • 浏览: 193166 次
  • 性别: Icon_minigender_1
  • 来自: 昆明
社区版块
存档分类
最新评论

LifeRay Portal 6学习笔记5:Struts Portlet开发示例

阅读更多

这篇所说的Struts Portlet是在Ext环境下开发的,使用liferay里面集成的Struts 1.2

 

开发流程图


 

本文是基于以前的在Liferay IDE里面创建的ext环境开发。

准备工作

1、在ext-web目录下面创建如下目录/html/portlet/struts

2、在ext-impl/src下面创建包content,并在这个包下面创建文件Language-ext_zh_CN.properties

3、将tomcat/webapps/root/WEB-INF下面的liferay-display.xml文件copy到ext环境下面的WEB-INF目录下面。

配置Portlet:portlet-ext

 

在portlet-ext.xml里面写入如下内容

 

	<portlet>
		<portlet-name>strutsdemo</portlet-name>
		<display-name>strutsdemos</display-name>
		<portlet-class>com.liferay.portlet.StrutsPortlet</portlet-class>
		<init-param>
			<name>view-action</name>
			<value>/strutsportlet/demo</value>
		</init-param>
		<expiration-cache>0</expiration-cache>
		<supports>
			<mime-type>text/html</mime-type>
		</supports>
		<resource-bundle>com.liferay.portlet.StrutsResourceBundle</resource-bundle>
		<security-role-ref>
			<role-name>power-user</role-name>
		</security-role-ref>
		<security-role-ref>
			<role-name>user</role-name>
		</security-role-ref>
	</portlet>
 

 

 配置Portlet实例属性:Liferay-portlet-ext 

 

在liferay-portlet-ext里面写入,如下内容

 

 

 <portlet>
	  <portlet-name>strutsdemo</portlet-name>
	  <struts-path>strutsportlet</struts-path>
	  <use-default-template>false</use-default-template>
</portlet>

注意:这里的Struts-path是上面配置的value里面的第一个“/”和最后一个“/”之间的内容

         portlet-name必须和上面的一样。

 

归类Portlet:liferay-display

在Liferay-display里面将上面的portlet归类显示:

 

<category name="category.sample">
	<portlet id="47" />
	<portlet id="48" />
	<portlet id="50" />
	<portlet id="66" />
	<portlet id="strutsdemo"/>
</category>

 

 将其放入示例下面,这里的归类,根据自己的需要。

国际化

在这个文件Language-ext_zh_CN.properties里面写入我让要让这个portlet显示的名字:

 

javax.portlet.title.strutsdemo=strutsportlet\u793a\u4f8b

 这里的中文要使用native2ascii进行转义。

定义Struts页面流

在struts-config-ext.xml里面写入如下内容:

 

<action path="/strutsportlet/demo" type="com.liferay.portlet.strutsdemo.StrutsAction">
	<forward name="sturts_portlet.view" path="sturts_portlet.view" />
	<forward name="sturts_portlet.success" path="sturts_portlet.success" />
	<forward name="sturts_portlet.err" path="sturts_portlet.err"/>
</action>

 

 这里的path,是前面的portlet-ext.xml里面定义的。其他的和普通Struts一样

 

定义title页面布局

在tiles-defs-ext.xml里面写入如下内容:

 

<definition name="portlet.ext" extends="portlet" />
<definition name="sturts_portlet.view" extends="portlet.ext">
	<put name="portlet_content" value="/portlet/struts/view.jsp" />
</definition>
<definition name="sturts_portlet.success" extends="portlet.ext">
	<put name="portlet_content" value="/portlet/struts/success.jsp" />
</definition>
<definition name="sturts_portlet.err" extends="portlet.ext">
	<put name="portlet_content" value="/portlet/struts/error.jsp" />
</definition>

 这里的portlet.ext继承自portlet,也就是说portlet.ex会使用portlet.jsp作为他的模板。下面的这些同理。

创建view.jsp

在/html/portlet/struts下面创建init.jsp文件,在里面写入如下内容:

 

<%@ include file="/html/portlet/init.jsp" %>

 这里会报错,不用理会,因为这是通过ext环境开发的,部署后就会找到这个文件的。

 

创建view.jsp,内容如下:

 

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ include file="/html/portlet/struts/init.jsp" %>

This is the <b>LiferayStudy</b> portlet.
<portlet:actionURL var="submitUrl">
	<portlet:param name="struts_action" value="/strutsportlet/demo" />
</portlet:actionURL>
<form action="<%=submitUrl%>" method="post">
输入你的名字:<input type="text" id="name" name="name">
<input type="submit"" value="提交">

</form>

portlet标签的意思,请参看

Liferay Portal 6学习笔记1:Portal介绍

创建Action类

 

 package com.liferay.portlet.strutsdemo;

import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.PortletConfig;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;

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

import com.liferay.portal.struts.PortletAction;


public class StrutsAction extends PortletAction {
	

	public void processAction(ActionMapping mapping, ActionForm form,
			PortletConfig config, ActionRequest req, ActionResponse res)
			throws Exception {
		String name = req.getParameter("name");
		if (null == name || "".equals(name)) {
			setForward(req, "sturts_portlet.err");
		} else {
			setForward(req, "sturts_portlet.success");
		}
	}

public ActionForward render(ActionMapping mapping, ActionForm form,
			PortletConfig config, RenderRequest req, RenderResponse res)
			throws Exception {
		if (getForward(req) != null && !getForward(req).equals("")) {
			return mapping.findForward(getForward(req));
		} else {
		return mapping.findForward("sturts_portlet.view");
	}
}
	
}

成功和错误页面不在写,可以根据自己的需要编写了

 

部署Portlet

打开Ant界面,Eclipse--》show views--》ant 添加build文件,找到Ext工程下面的build.xml文件,点击其中的

Direct-deploy。

完成之后,启动liferay-tomcat

 

在浏览中输入http://localhost:8080,登录,添加portlet



  • 大小: 35.9 KB
  • 大小: 10 KB
  • 大小: 4.5 KB
9
5
分享到:
评论
17 楼 nilm61 2012-07-02  
HappyAngel 写道
kelly_zhang921 写道
真liuyake 写道
hu437 写道
真liuyake 写道
为什么我按照你的步骤就会报这样的错呢?而且还把portlet的分类搞错了 。求解!

08:21:04,484 ERROR [IncludeTag:231] Current URL /c/portal/render_portlet generates exception: java.util.MissingResourceException: Can't find resource for bundle com.liferay.portlet.PortletResourceBundle, key javax.portlet.title
08:21:04,484 ERROR [IncludeTag:154] java.util.MissingResourceException: Can't find resource for bundle com.liferay.portlet.PortletResourceBundle, key javax.portlet.title
at java.util.ResourceBundle.getObject(ResourceBundle.java:374)
at java.util.ResourceBundle.getString(ResourceBundle.java:334)
at com.liferay.portal.util.PortalImpl.getPortletTitle(PortalImpl.java:2526)
at com.liferay.portal.util.PortalUtil.getPortletTitle(PortalUtil.java:774)
at com.liferay.portal.util.comparator.PortletTitleComparator.compare(PortletTitleComparator.java:52)
at com.liferay.portal.util.comparator.PortletTitleComparator.compare(PortletTitleComparator.java:1)
at java.util.Arrays.mergeSort(Arrays.java:1270)
at java.util.Arrays.mergeSort(Arrays.java:1282)
at java.util.Arrays.sort(Arrays.java:1210)
at java.util.Collections.sort(Collections.java:159)
at com.liferay.portal.kernel.util.ListUtil.sort(ListUtil.java:176)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)

你检查一下你的title和portlet里面定义是的是否一样?


我是完全按照你的代码复制来的,能方便把你练习做的代码发来参考一下吗?感激不尽,最好多发几个啊,邮箱 liuyake@yeah.net


大哥我也碰到了这个问题,你怎么解决的啊,共享一下啊


我也是这个问题,能提供下解决方案么?我检查了title和portlet 里面确实是一样的啊。 我用的是6.05

这个最终怎么解决的
16 楼 coolhappiness 2011-09-19  
楼主 ,我现在 正在 弄 liferay 集成  flex 项目,,,楼主 能否 把 这个 例子程序 给我 发一份 ,不胜感激!!!!
          wuxinglec@gmail.com
                                 非常感谢!!!!
15 楼 ReAngel 2011-04-07  
按照您的步骤一步一步来的,但是就是出不来结果,也不报错,到底为什么呢??你认为最有可能出现的问题在哪里?
14 楼 HappyAngel 2011-03-22  
kelly_zhang921 写道
真liuyake 写道
hu437 写道
真liuyake 写道
为什么我按照你的步骤就会报这样的错呢?而且还把portlet的分类搞错了 。求解!

08:21:04,484 ERROR [IncludeTag:231] Current URL /c/portal/render_portlet generates exception: java.util.MissingResourceException: Can't find resource for bundle com.liferay.portlet.PortletResourceBundle, key javax.portlet.title
08:21:04,484 ERROR [IncludeTag:154] java.util.MissingResourceException: Can't find resource for bundle com.liferay.portlet.PortletResourceBundle, key javax.portlet.title
at java.util.ResourceBundle.getObject(ResourceBundle.java:374)
at java.util.ResourceBundle.getString(ResourceBundle.java:334)
at com.liferay.portal.util.PortalImpl.getPortletTitle(PortalImpl.java:2526)
at com.liferay.portal.util.PortalUtil.getPortletTitle(PortalUtil.java:774)
at com.liferay.portal.util.comparator.PortletTitleComparator.compare(PortletTitleComparator.java:52)
at com.liferay.portal.util.comparator.PortletTitleComparator.compare(PortletTitleComparator.java:1)
at java.util.Arrays.mergeSort(Arrays.java:1270)
at java.util.Arrays.mergeSort(Arrays.java:1282)
at java.util.Arrays.sort(Arrays.java:1210)
at java.util.Collections.sort(Collections.java:159)
at com.liferay.portal.kernel.util.ListUtil.sort(ListUtil.java:176)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)

你检查一下你的title和portlet里面定义是的是否一样?


我是完全按照你的代码复制来的,能方便把你练习做的代码发来参考一下吗?感激不尽,最好多发几个啊,邮箱 liuyake@yeah.net


大哥我也碰到了这个问题,你怎么解决的啊,共享一下啊


我也是这个问题,能提供下解决方案么?我检查了title和portlet 里面确实是一样的啊。 我用的是6.05
13 楼 hu437 2010-12-15  
阳光晒晒 写道
能往我邮箱发一份demo吗? 谢谢!
598048929@qq.com


等晚上回去看看以前写的小例子还在不
12 楼 hu437 2010-12-15  
zfanxu 写道
Lz,能把你这篇文章的源代码拿出来分享下吗?最后是直接发到我的邮箱:zfanxu@163.com
PS:LZ,是怎么学习关于liferay portal这方面的相关知识的?


我学习Liferay,基本上就是自己写做一个小例子,然后翻一下Liferay自带的示例,然后自己仔细的理解一下portlet的工作原理

其实理解了portlet的工作原理,就发现liferay或者其他portal的实现基本上都差不多,和普通的web工程没有多少区别的
11 楼 阳光晒晒 2010-12-15  
能往我邮箱发一份demo吗? 谢谢!
598048929@qq.com
10 楼 zfanxu 2010-10-13  
Lz,能把你这篇文章的源代码拿出来分享下吗?最后是直接发到我的邮箱:zfanxu@163.com
PS:LZ,是怎么学习关于liferay portal这方面的相关知识的?
9 楼 kelly_zhang921 2010-09-27  
真liuyake 写道
hu437 写道
真liuyake 写道
为什么我按照你的步骤就会报这样的错呢?而且还把portlet的分类搞错了 。求解!

08:21:04,484 ERROR [IncludeTag:231] Current URL /c/portal/render_portlet generates exception: java.util.MissingResourceException: Can't find resource for bundle com.liferay.portlet.PortletResourceBundle, key javax.portlet.title
08:21:04,484 ERROR [IncludeTag:154] java.util.MissingResourceException: Can't find resource for bundle com.liferay.portlet.PortletResourceBundle, key javax.portlet.title
at java.util.ResourceBundle.getObject(ResourceBundle.java:374)
at java.util.ResourceBundle.getString(ResourceBundle.java:334)
at com.liferay.portal.util.PortalImpl.getPortletTitle(PortalImpl.java:2526)
at com.liferay.portal.util.PortalUtil.getPortletTitle(PortalUtil.java:774)
at com.liferay.portal.util.comparator.PortletTitleComparator.compare(PortletTitleComparator.java:52)
at com.liferay.portal.util.comparator.PortletTitleComparator.compare(PortletTitleComparator.java:1)
at java.util.Arrays.mergeSort(Arrays.java:1270)
at java.util.Arrays.mergeSort(Arrays.java:1282)
at java.util.Arrays.sort(Arrays.java:1210)
at java.util.Collections.sort(Collections.java:159)
at com.liferay.portal.kernel.util.ListUtil.sort(ListUtil.java:176)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)

你检查一下你的title和portlet里面定义是的是否一样?


我是完全按照你的代码复制来的,能方便把你练习做的代码发来参考一下吗?感激不尽,最好多发几个啊,邮箱 liuyake@yeah.net


大哥我也碰到了这个问题,你怎么解决的啊,共享一下啊
8 楼 hu437 2010-09-20  
真liuyake 写道
我的问题解决了,但是又有郁闷的事情了,把我的portlet的分类搞乱了。如图


分类应该是主要在你的liferay-display.xml里面的,我给你发了一份我的这个的示例,你看一下吧~~~
7 楼 真liuyake 2010-09-20  
我的问题解决了,但是又有郁闷的事情了,把我的portlet的分类搞乱了。如图

6 楼 真liuyake 2010-09-19  
hu437 写道
真liuyake 写道
为什么我按照你的步骤就会报这样的错呢?而且还把portlet的分类搞错了 。求解!

08:21:04,484 ERROR [IncludeTag:231] Current URL /c/portal/render_portlet generates exception: java.util.MissingResourceException: Can't find resource for bundle com.liferay.portlet.PortletResourceBundle, key javax.portlet.title
08:21:04,484 ERROR [IncludeTag:154] java.util.MissingResourceException: Can't find resource for bundle com.liferay.portlet.PortletResourceBundle, key javax.portlet.title
at java.util.ResourceBundle.getObject(ResourceBundle.java:374)
at java.util.ResourceBundle.getString(ResourceBundle.java:334)
at com.liferay.portal.util.PortalImpl.getPortletTitle(PortalImpl.java:2526)
at com.liferay.portal.util.PortalUtil.getPortletTitle(PortalUtil.java:774)
at com.liferay.portal.util.comparator.PortletTitleComparator.compare(PortletTitleComparator.java:52)
at com.liferay.portal.util.comparator.PortletTitleComparator.compare(PortletTitleComparator.java:1)
at java.util.Arrays.mergeSort(Arrays.java:1270)
at java.util.Arrays.mergeSort(Arrays.java:1282)
at java.util.Arrays.sort(Arrays.java:1210)
at java.util.Collections.sort(Collections.java:159)
at com.liferay.portal.kernel.util.ListUtil.sort(ListUtil.java:176)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)

你检查一下你的title和portlet里面定义是的是否一样?


我是完全按照你的代码复制来的,能方便把你练习做的代码发来参考一下吗?感激不尽,最好多发几个啊,邮箱 liuyake@yeah.net
5 楼 hu437 2010-09-18  
真liuyake 写道
为什么我按照你的步骤就会报这样的错呢?而且还把portlet的分类搞错了 。求解!

08:21:04,484 ERROR [IncludeTag:231] Current URL /c/portal/render_portlet generates exception: java.util.MissingResourceException: Can't find resource for bundle com.liferay.portlet.PortletResourceBundle, key javax.portlet.title
08:21:04,484 ERROR [IncludeTag:154] java.util.MissingResourceException: Can't find resource for bundle com.liferay.portlet.PortletResourceBundle, key javax.portlet.title
at java.util.ResourceBundle.getObject(ResourceBundle.java:374)
at java.util.ResourceBundle.getString(ResourceBundle.java:334)
at com.liferay.portal.util.PortalImpl.getPortletTitle(PortalImpl.java:2526)
at com.liferay.portal.util.PortalUtil.getPortletTitle(PortalUtil.java:774)
at com.liferay.portal.util.comparator.PortletTitleComparator.compare(PortletTitleComparator.java:52)
at com.liferay.portal.util.comparator.PortletTitleComparator.compare(PortletTitleComparator.java:1)
at java.util.Arrays.mergeSort(Arrays.java:1270)
at java.util.Arrays.mergeSort(Arrays.java:1282)
at java.util.Arrays.sort(Arrays.java:1210)
at java.util.Collections.sort(Collections.java:159)
at com.liferay.portal.kernel.util.ListUtil.sort(ListUtil.java:176)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)

你检查一下你的title和portlet里面定义是的是否一样?
4 楼 真liuyake 2010-09-18  
为什么我按照你的步骤就会报这样的错呢?而且还把portlet的分类搞错了 。求解!

08:21:04,484 ERROR [IncludeTag:231] Current URL /c/portal/render_portlet generates exception: java.util.MissingResourceException: Can't find resource for bundle com.liferay.portlet.PortletResourceBundle, key javax.portlet.title
08:21:04,484 ERROR [IncludeTag:154] java.util.MissingResourceException: Can't find resource for bundle com.liferay.portlet.PortletResourceBundle, key javax.portlet.title
at java.util.ResourceBundle.getObject(ResourceBundle.java:374)
at java.util.ResourceBundle.getString(ResourceBundle.java:334)
at com.liferay.portal.util.PortalImpl.getPortletTitle(PortalImpl.java:2526)
at com.liferay.portal.util.PortalUtil.getPortletTitle(PortalUtil.java:774)
at com.liferay.portal.util.comparator.PortletTitleComparator.compare(PortletTitleComparator.java:52)
at com.liferay.portal.util.comparator.PortletTitleComparator.compare(PortletTitleComparator.java:1)
at java.util.Arrays.mergeSort(Arrays.java:1270)
at java.util.Arrays.mergeSort(Arrays.java:1282)
at java.util.Arrays.sort(Arrays.java:1210)
at java.util.Collections.sort(Collections.java:159)
at com.liferay.portal.kernel.util.ListUtil.sort(ListUtil.java:176)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
3 楼 hu437 2010-08-02  
zncllxyz06 写道
好贴。
不过在protal里面而不是在ext里面遵循相同的配置过程也可以配置成功么?

可以的,ext就是portal的一个扩展,这些ext文件会和portal里面的合并,同样的会覆盖
2 楼 zncllxyz06 2010-08-02  
好贴,顶贴是一种好习惯
1 楼 zncllxyz06 2010-08-02  
好贴。
不过在protal里面而不是在ext里面遵循相同的配置过程也可以配置成功么?

相关推荐

Global site tag (gtag.js) - Google Analytics