lbom

小江西

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  18 随笔 :: 21 文章 :: 69 评论 :: 0 Trackbacks
 Portlet开发基知识

1.portlet.xml文件,放置在WEB_INF/portlet.xml下面。典型的例子:

<portlet>
<description>Description goes here</description>
<portlet-name>first</portlet-name>
<portlet-class>com.malani.examples.portlets.jsr168.FirstPortlet
</portlet-class>
<portlet-info>
<title>First</title>
</portlet-info>
</portlet>

portlet-class就是实现的类。可以和web.xml对照比较一下。

2.实现的Portlet类。和传统的servlet一样,portal容器来管理protlet的生命周期。它必须实现javax.portlet.Portlet接口。但是jsr168标准提供了一个方便类:GenericPortlet你可以直接
继承它就ok了。

1)生命周期,同servlet一样Portlet必须有自己生命周期。这定义在javax.portlet.Portlet接口中。它的方法是:init(),render(),processAction(),destroy().但创建portlet实例的时候调用init()方法。它完成一些需要花费昂贵的资源的动作。但实例被销毁的时候,容器调用destroy方法来释放这些资源。

Portlet规范清晰的区分了render请求和action请求的区别。renderRequest()会调用该portlet上的render()方法,actionRequst()会调用processAction()方法.要注意的是一次用户完整的请求将是:portal页面上的所有的protlet的 render()调用,该请求protlet的processAction()调用。具体看图:

3.Portlet模式

VIEW模式是你必须实现的,EDIT,HELP模式是可选的。你可以通过修改doEdit()和doHelp()
方法来实现这些模式。另外还需要在portlet.xml配置模式:

<supports>
<mime-type>text/html</mime-type>
<portlet-mode>edit</portlet-mode>
<portlet-mode>help</portlet-mode>
</supports>

修改本文件但没有实现该模式容器会抛出 javax.portlet.PortletException异常.

实现window状态,注意JSR 168并没有对这个进行规定,但webLogic 完成了:

<portlet>
<portlet-name>state</portlet-name>
<supports>
<mime-type>text/html</mime-type>
<excluded-window-state>minimized</excluded-window-state>
<excluded-window-state>maximized</excluded-window-state>
</supports>
</portlet>

包含JSP文件:

上面的例子中我们在doView方法中通过方法得到Writer实例,这样可以输出HTML片断。但是,
我们并不推荐您这样做。我们推荐您使用JSP来达到视图-java的分离。为了包含一个特定的jsp
首先你必须得到PortletContext.在PortletContext中,通过调用getRequestDispatcher()方法
得到PorletRequestDispatcher,通过它的includer()方法来包含JSp例如;
// execute the necessary logic here...
PortletRequestDispatcher aDispatcher =
getPortletContext().getRequestDispatcher(
"/IncludePortlet/includeView.jsp"
);
aDispatcher.include(aRequest, aResponse);

处理动作

在标准的web应用程序中,提交表单,或者一个动作url常见的。JSR168规范中定义了portlet taglib
来帮助我们完成这些工作:

<form action="<portlet:actionURL/>" method="post">
...
</form>

提交的话会自动调用该portlet的processAction(ActionRequest aRequest, ActionResponse aResponse)方法,这就跟你传统方式一样了reqeust的getParameter()或者是getAttribute()来
得到传来的参数。

processAction()方法设置response对象中的值。不要使用ActionRequest或ActionResponse对象的setAttribute()方法。值不会从processAction()传递到render()方法,而且在JSP中是不可用的。相反要使用ActionResponse对象的setRenderParameter()方法。这些render参数将对所有后续render请求可用,这一点与典型的Web应用程序请求属性很不相同。典型的Web application请求属性只对于一个请求可用。另一方面,render请求参数对于许多后续render请求可用。render参数保持可用直到值被动作的重新执行显式地修改或删除。

所呈现的参数是怎样显示在JSP上的呢?应使用来自portlet标签库的defineObjects标签来定义portlet对象。该标签使renderRequest、renderResponse和portletConfig portlet对象在页面中可用。参数通过调用renderRequest对象的getParameter()方法来显示。请参考与所包含的源代码示例中的favoriteColorView.jsp。

  portlet FavoriteColor也展示了其他概念。第一个是如何在processAction()方法中用编程的方法改变portlet模式。调用ActionResponse对象的setPortletMode()方法来修改portlet模式。第二个概念是如何使用一个HTML链接来修改portlet模式。该链接使用来自portlet标签库的renderURL标签生成。根据希望的portlet模式指定portletMode属性的值。请参考源代码示例中的FavoriteColorPortlet类和favoriteColorView.jsp页面。

posted on 2006-04-12 14:07 lbom 阅读(635) 评论(0)  编辑  收藏 所属分类: 网络资料

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


网站导航: