Jetspeed2学习笔记(三)(转载)

来源:互联网 发布:aix测试端口 编辑:程序博客网 时间:2024/04/28 21:22
12、Portlet对动作的处理过程
 
在一个标准的Web应用程序中,一个HTML表单提交将导致执行一些业务逻辑。业务处理的结果,要么作为属性而被设置在请求或会话中并转发,要么包含到下一个JSP。

  在一个JSR 168 portlet中,一个HTML表单的动作URL应该是什么样呢?JSR 168定义了一个JSP标签库,称为portlet taglib。HTML表单的动作URL可以使用actionURL portlet标签生成。例如(请参考favoriteColorEdit.jsp文件):
<form action="<portlet:actionURL/>" method="post">
...
</form>
提交该HTML表单将会导致调用portlet的processAction(ActionRequest aRequest, ActionResponse aResponse)方法。像通常一样,可以通过调用request对象的getParameter()方法来获得表单参数。注意:通过提交表单调用动 作,但portlet中却没有processAction()方法,将会导致javax.portlet.PortletException。

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

  考虑portlet FavoriteColor。它在VIEW模式显示了一个用户偏好的颜色,但是可以在EDIT模式下更改。在EDIT模式下提交偏好的颜色选择将调用 processAction()方法。该方法获得偏好的颜色请求参数,并将其设置为render参数。这样,偏好的的颜色render参数将在所有后续 render请求中都可用。

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

  portlet FavoriteColor也展示了其他概念。第一个是如何在processAction()方法中用编程的方法改变portlet模式。调用 ActionResponse对象的setPortletMode()方法来修改portlet模式。第二个概念是如何使用一个HTML链接来修改 portlet模式。该链接使用来自portlet标签库的renderURL标签生成。根据希望的portlet模式指定portletMode属性的 值。请参考源代码示例中的FavoriteColorPortlet类和favoriteColorView.jsp页面。
 
13、portlet中对预先配置参数的读取
在portlet的开发中,可以在portlet.xml文件中预先配置相关的参数,然后在代码中通过PortletConfig来进行读取,具体示例如下:
a、 在portlet.xml文件中添加如下配置片断,添加一个参数:
portlet.xml:

          <init-param>
               <name>jspView</name>
               <value>/jsp/view.jsp</value>
     </init-param>
 
b、 在portlet程序中如下读取其配置:
SimplePortlet.java:

String jspName = this.getPortletConfig().getInitParameter("jspView");
 
14、 Portlet标签库
 
a、 定义对象(defineObjects)标签:
如果打开其中的一个JSP文件,你会发现,和Servlet一样,JSP中可以使用Portlet的一些variables.例如:

    renderResponse
    renderRequest
    portletConfig--------
可以用此变量获得portlet.xml文件中的配置信息

但是必须声名:
<portlet:defineObjects/>其中不可以定义任何属性或者包含任何内容.
 
b、 动作URL(actionURL )标签:
 
属性                     值类型                     对应值
windowState               String                     minimized, normal, maximized
portletMode               String                      view, edit, help
var                       String                    
任何值
secure                    String                      true,false

<portlet:actionURL windowState=”normal” portletMode=”edit”>
<portlet:param name=”action” value=”login”/>
</portlet:actionURL>

以上创建一个action URL , 当访问它时将使portlet window变为normal 装态, 模式变为 edit。
可以通过如下代码在processAction中判断当前操作模式:
public void processAction(ActionRequest request, ActionResponse response)
    throws PortletException, IOException {
        if (request.getPortletMode() == PortletMode.VIEW) {   //浏览页
           …..
}else if(request.getPortletMode() == PortletMode.EDIT){ //编辑状态
    …..
}else if(request.getPortletMode() == PortletMode.HELP){ //帮助状态
    …..
}
 
 
c、 renderURL 标签:
属性                        值类型                 对应值
windowState                  String                 minimized,normal,maximized
portletMode                  String                  view, edit, help
var                         String                 
任何值
secure                       String                  true,false

<portlet:renderURL portletMode=”view” windowState=”maximized”>
     <portlet:param name=”number” value=”1”/> 
     <portlet:param name=”page” value=”2”/>
</portlet:renderURL>

创建一个render URL , 当访问它时将使portlet window变为maximized装态, 模式变为 view.
 
d、 namespace Tag
为目前的Portlet产生一个唯一的Value. 防止和其他的Portlet 或者Portal页面上的value产生冲突.
<A HREF=”javascript: <portlet:namespace/>doFoo()”>Foo</A>
 
e、 param Tag:這個 tag 是定義一個參數值, 可能是放在 actionURL 或 renderURL 之中. param Tag 不准包含任何 Body Content.
属性     值类型
name     String
<portlet:param name=”myParam” value=”someValue”/>
注: param Tag不可以有body content.
 
15、portlet缓存
控制portlet是否被缓存,及缓存的时间可以在portlet.xml文件中用如下标签:
<expiration-cache>0</expiration-cache>

原创粉丝点击