上一篇 | 下一篇

框架构建 Portlet 应用

发布: 2008-7-01 22:14 | 作者: admin | 来源: | 查看: 0次

2.定义BaseAction

代码清单11:

public class BaseAction extends StrutsAction{

protected transient final Log log = LogFactory.getLog(getClass());

private static WebApplicationContext wac = null;

public Object getBean(String name) {

return wac.getBean(name);

}

public void setServlet(ActionServlet actionServlet) {

super.setServlet(actionServlet);

ServletContext servletContext = actionServlet.getServletContext();

wac =

WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);

}

}

可以看到,在BaseAction中,维持了一个WebApplicationContext对象,通过调用这个对象的getBean方法,传入配置文件中的bean id,我们就可以定位到这个bean,也就是我们前面定义的业务层的各种服务。

在这里,我们的Action继承自StrutsAction,这个类继承自Struts框架中的Action类,其作用在Portlet Struts框架中与Action类在Struts框架中的作用类似。我们需要通过重载其public ActionForward execute(ActionMapping mapping,ActionForm form,PortletRequest request)throws Exception方法来实现我们自己的Action类。与Struts框架中的Action类相比,可以发现这个方法的参数中取消了Response对象,使我们无法简单的引用到,这个设计是由于IBM的WebSphere Portal Server的Portlet框架设计引起的,Portlet 处理分两阶段实现,操作阶段和呈现阶段。操作处理在呈现显示视图之前执行。在操作阶段,只有请求对象才会被传递给 portlet,而响应对象则不会传递,一些在操作阶段提供的信息(即请求参数)在呈现阶段不再可用。另外,因为在 portlet 没有新的事件发生时,刷新 portlet 页面时会调用呈现方法(如 doView()),因此所有呈现该页面所需的信息必须在每次调用该方法时可用,这就意味着,所有需要呈现的信息,都需要保存在PortletSession对象中,而不能保存在PortletRequest对象中,如果保存在Request对象中,在刷新页面的时候,会因为没有可用的变量而导致页面出错。

Action类的具体实现,请参见附件中的代码文件。

整个项目文件结构图:

结束语

本示例介绍了如何在 Portlet 开发中引入 Hibernate,Spring 和 Struts Portlet 框架,在下面的下载部分提供了本例的完整实现。附件是本示例的war包,其中已经包含了示例的源代码,可以直接将其导入WSAD中查看。

[8] [9]

字号: | 推荐给好友

评分:0

我来说两句