在这里将介绍如何集成Struts的DispatchAction多方法的功能,下面是代码
packagecn.pisoft.portlet.struts;

importjava.lang.reflect.InvocationTargetException;
importjava.lang.reflect.Method;
importjava.security.MessageDigest;
importjava.security.NoSuchAlgorithmException;
importjava.util.ArrayList;
importjava.util.HashMap;
importjava.util.List;
importjava.util.Map;

importjavax.portlet.ActionRequest;
importjavax.portlet.ActionResponse;
importjavax.portlet.PortletConfig;
importjavax.portlet.PortletSession;
importjavax.portlet.RenderRequest;
importjavax.portlet.RenderResponse;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;

importorg.apache.commons.fileupload.FileItem;
importorg.apache.commons.fileupload.FileItemFactory;
importorg.apache.commons.fileupload.FileUploadException;
importorg.apache.commons.fileupload.portlet.PortletFileUpload;
importorg.apache.commons.logging.Log;
importorg.apache.commons.logging.LogFactory;
importorg.apache.struts.Globals;
importorg.apache.struts.action.ActionForm;
importorg.apache.struts.action.ActionForward;
importorg.apache.struts.action.ActionMapping;
importorg.apache.struts.util.MessageResources;

importcn.pisoft.portlet.km.ExtActionKey;
importcn.pisoft.portlet.km.ServicePool;

importcom.liferay.portal.model.Layout;
importcom.liferay.portal.model.User;
importcom.liferay.portal.model.impl.ResourceImpl;
importcom.liferay.portal.service.ResourceLocalServiceUtil;
importcom.liferay.portal.service.UserLocalServiceUtil;
importcom.liferay.portal.struts.PortletAction;
importcom.liferay.portal.util.PortalUtil;
importcom.liferay.portal.util.WebKeys;
importcom.liferay.portlet.ActionRequestImpl;


publicclassDispatchPortletActionextendsPortletAction...{
protectedActionForwarddispatchMethod(ActionMappingmapping,
ActionFormform,HttpServletRequestrequest,

HttpServletResponseresponse,Stringname)throwsException...{

PortletConfigportletConfig=(PortletConfig)request
.getAttribute(WebKeys.JAVAX_PORTLET_CONFIG);

RenderRequestrenderRequest=(RenderRequest)request
.getAttribute(WebKeys.JAVAX_PORTLET_REQUEST);

RenderResponserenderResponse=(RenderResponse)request
.getAttribute(WebKeys.JAVAX_PORTLET_RESPONSE);


if(name==null)...{
returnthis.view(mapping,form,portletConfig,renderRequest,
renderResponse);
}

Methodmethod=null;


try...{
method=getMethod(name);


}catch(NoSuchMethodExceptione)...{
Stringmessage=messages.getMessage("dispatch.method",mapping
.getPath(),name);
log.error(message,e);

StringuserMsg=messages.getMessage("dispatch.method.user",
mapping.getPath());
thrownewNoSuchMethodException(userMsg);
}

ActionForwardforward=null;

try...{

Objectargs[]=...{mapping,form,portletConfig,renderRequest,
renderResponse};
forward=(ActionForward)method.invoke(this,args);


}catch(ClassCastExceptione)...{
Stringmessage=messages.getMessage("dispatch.return",mapping
.getPath(),name);
log.error(message,e);
throwe;


}catch(IllegalAccessExceptione)...{
Stringmessage=messages.getMessage("dispatch.error",mapping
.getPath(),name);
log.error(message,e);
throwe;


}catch(InvocationTargetExceptione)...{
Throwablet=e.getTargetException();

if(tinstanceofException)...{
throw((Exception)t);

}else...{
Stringmessage=messages.getMessage("dispatch.error",mapping
.getPath(),name);
log.error(message,e);
thrownewServletException(t);
}
}
return(forward);
}

protectedStringgetMethodName(ActionMappingmapping,ActionFormform,
HttpServletRequestrequest,HttpServletResponseresponse,

Stringparameter)throwsException...{

StringmethodName=request.getParameter(parameter);

if(methodName==null||methodName.length()==0)...{
methodName=(String)request.getAttribute(parameter);
}
returnmethodName;
}

publicActionForwardview(ActionMappingmapping,ActionFormform,
PortletConfigconfig,RenderRequestreq,RenderResponseres)

throwsException...{
returnnull;
}


protectedMethodgetMethod(Stringname)throwsNoSuchMethodException...{

synchronized(methods)...{
Methodmethod=(Method)methods.get(name);


if(method==null)...{
method=clazz.getMethod(name,types);
methods.put(name,method);
}

return(method);
}
}


protectedvoidsaveToken(RenderRequestrequest)...{
Stringtoken=generateToken(request.getPortletSession().getId());

request.getPortletSession().setAttribute(Globals.TRANSACTION_TOKEN_KEY,
token);
}

publicsynchronizedbooleanisTokenValid(RenderRequestrequest,

booleanreset)...{
//Retrievethecurrentsessionforthisrequest
PortletSessionsession=request.getPortletSession(false);


if(session==null)...{
returnfalse;
}

//Retrievethetransactiontokenfromthissession,and
//resetitifrequested
Stringsaved=(String)session
.getAttribute(Globals.TRANSACTION_TOKEN_KEY);


if(saved==null)...{
returnfalse;
}


if(reset)...{
this.resetToken(request);
}

Stringtoken=request
.getParameter(org.apache.struts.taglib.html.Constants.TOKEN_KEY);


if(token==null)...{
returnfalse;
}

returnsaved.equals(token);
}


publicsynchronizedvoidresetToken(RenderRequestrequest)...{

request.getPortletSession().removeAttribute(
Globals.TRANSACTION_TOKEN_KEY);
}


publicsynchronizedStringgenerateToken(Stringid)...{

try...{
longcurrent=System.currentTimeMillis();


if(current==previous)...{
current++;
}

previous=current;

byte[]now=newLong(current).toString().getBytes();
MessageDigestmd=MessageDigest.getInstance("MD5");

md.update(id.getBytes());
md.update(now);

returntoHex(md.digest());

}catch(NoSuchAlgorithmExceptione)...{
returnnull;
}
}


privateStringtoHex(byte[]buffer)...{
StringBuffersb=newStringBuffer(buffer.length*2);


for(inti=0;i<buffer.length;i++)...{
sb.append(Character.forDigit((buffer[i]&0xf0)>>4,16));
sb.append(Character.forDigit(buffer[i]&0x0f,16));
}

returnsb.toString();
}



protectedObjectgetService(StringserviceId)...{
returnServicePool.getService(serviceId);
}


protectedvoidregisterModelResource(RenderRequestrequest,StringclassName,Stringid)...{

try...{
Layoutlayout=(Layout)request.getAttribute(WebKeys.LAYOUT);
StringuserId=request.getRemoteUser();
Useruser=UserLocalServiceUtil.getUserById(userId);
StringgroupId=PortalUtil.getPortletGroupId(layout.getPlid());
ResourceLocalServiceUtil.addModelResources(user.getCompanyId(),
groupId,userId,className,id,newString[1],
newString[1]);

http://images.csdn.net/syntaxhi
分享到:
相关推荐
本篇文章将详细讲解如何在基于Myeclipse 6和Tomcat 6.0.24的环境中搭建Liferay 5.2.3的二次开发环境。 **一、环境准备** 在开始Liferay的开发工作之前,我们需要准备好以下软件: 1. **Myeclipse 6**: 这是一个...
Liferay 6.2 开发环境搭建.doc,包括Liferay SDK下载及搭建过程等!
Liferay 6.1.2 开发环境的搭建 Liferay 是一个开源的企业portal平台,提供了丰富的功能和插件,帮助开发者快速构建企业门户网站。为了搭建 Liferay 6.1.2 开发环境,我们需要安装 JDK、Liferay Portal、Tomcat、Ant...
搭建Liferay Portal的开发环境是一项细致且复杂的过程,涉及到多个步骤和组件的配合。本文将根据给定的文件信息,详细解析如何从零开始构建一个完整的Liferay开发环境,包括必要的准备、具体步骤以及关键配置。 ###...
### Liferay 6.1与Eclipse 3.6开发环境搭建详解 #### 一、前言 在软件开发领域,构建一个高效稳定的开发环境至关重要。对于基于Liferay平台的应用开发来说,选择合适的集成开发环境(IDE)是提高开发效率的关键之一...
**Liferay Portal 6.0 开发环境搭建详解** Liferay Portal是一款强大的开源企业门户解决方案,深受全球开发者和企业的喜爱。它基于先进的Java技术和Web 2.0特性,支持多种应用服务器、servlet容器、数据库以及操作...
本教程将详细解释如何在Windows环境下搭建Liferay的开发环境,以进行二次开发。 首先,我们需要准备以下文件: 1. JDK (Java Development Kit) - 用于编译和运行Java代码。 2. Ant - 一个自动化构建工具,Liferay的...
本文档旨在详细介绍如何利用Eclipse集成开发环境(IDE)来搭建Liferay开发环境,并创建portlet项目。通过本指南,您将能够成功安装必要的软件并配置开发环境。 #### 二、所需资源 为了搭建Liferay开发环境,您需要...
2. **LifeRay二次开发指南**:二次开发指南是针对已经熟悉LifeRay基础的开发者,它可能会详细讲解如何基于LifeRay的开放源代码进行定制化开发,包括创建自定义主题、布局、portlet、服务等,以及如何利用LifeRay的...
【Liferay 5.2.3 开发环境搭建】 Liferay 是一款强大的开源门户平台,基于J2EE架构,融合了EJB、JMS等多种技术。它的前端使用Struts MVC框架,通过XML配置文件实现portlet的动态扩展。此外,Liferay还集成了Web服务...
本文将详细介绍如何搭建Liferay 5.2.3的开发环境。 1. **关于Liferay 5.2.3** Liferay 5.2.3是Liferay Portal的一个较早版本,发布于2009年。尽管现在已经有了更先进的版本,但5.2.3仍然被一些企业使用,因为它...
### MyEclipse 8 + Liferay 开发环境...通过上述步骤,开发者可以在 MyEclipse 8 环境下成功搭建 Liferay 的开发环境,并进行高效的二次开发工作。这不仅提高了开发效率,也为构建复杂的企业级应用提供了坚实的基础。
#### 三、Liferay Portal 二次开发 ##### 3.1 重要基类:GenericPortlet Liferay提供了`GenericPortlet`基类,简化了Portlet的开发流程。继承这个基类可以自动实现大部分Portlet生命周期的方法,开发者只需关注...
为了对Liferay进行二次开发,我们需要一个合适的集成开发环境(IDE),Eclipse是一个常用的选择。本篇文章将详细介绍如何利用Eclipse配置Liferay的二次开发环境,并着重讨论jikes.exe在这个过程中的作用。 首先,...
【Liferay 5.2.3 环境搭建】是指在本地计算机上配置和安装Liferay Portal 5.2.3版本的过程。Liferay是一个全面的门户平台,基于Java Enterprise Edition (J2EE) 技术构建,利用EJB(Enterprise JavaBeans)和JMS...
搭建Liferay开发环境的第一步是安装Java Development Kit (JDK)。确保安装的是JDK 8或更高版本,因为Liferay DXP(当前稳定版)需要这个版本的Java。同时,安装一个合适的IDE,例如Eclipse或IntelliJ IDEA,并配置好...
MyEclipse8+Liferay开发环境搭建