Jetspeed2学习笔记(三)

来源:百度文库 编辑:神马文学网 时间:2024/04/21 00:17:12
12、Portlet对动作的处理过程
在一个标准的Web应用程序中,一个HTML表单提交将导致执行一些业务逻辑。业务处理的结果,要么作为属性而被设置在请求或会话中并转发,要么包含到下一个JSP。
在一个JSR 168 portlet中,一个HTML表单的动作URL应该是什么样呢?JSR 168定义了一个JSP标签库,称为portlet taglib。HTML表单的动作URL可以使用actionURL portlet标签生成。例如(请参考favoriteColorEdit.jsp文件):

...

提交该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对象。该标签使renderRequest、renderResponse和portletConfig 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:

jspView
/jsp/view.jsp

b、 在portlet程序中如下读取其配置:
SimplePortlet.java:
String jspName = this.getPortletConfig().getInitParameter("jspView");
14、 Portlet标签库
a、 定义对象(defineObjects)标签:
如果打开其中的一个JSP文件,你会发现,和Servlet一样,JSP中可以使用Portlet的一些variables.例如:
renderResponse
renderRequest
portletConfig--------可以用此变量获得portlet.xml文件中的配置信息
但是必须声名:
其中不可以定义任何属性或者包含任何内容.
b、 动作URL(actionURL )标签:
属性                     值类型                     对应值
windowState               String                     minimized, normal, maximized
portletMode               String                      view, edit, help
var                       String                     任何值
secure                    String                      true,false



以上创建一个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




创建一个render URL , 当访问它时将使portlet window变为maximized装态, 模式变为 view.
d、 namespace Tag
为目前的Portlet产生一个唯一的Value. 防止和其他的Portlet 或者Portal页面上的value产生冲突.
doFoo()”>Foo
e、 param Tag:這個 tag 是定義一個參數值, 可能是放在 actionURL 或 renderURL 之中. param Tag 不准包含任何 Body Content.
属性     值类型
name     String

注: param Tag不可以有body content.
15、portlet缓存
控制portlet是否被缓存,及缓存的时间可以在portlet.xml文件中用如下标签:
0