在8.1GA中,弹出窗口和页面流无法一起使用,因为只有当前页面流及其堆栈(嵌套页面流的)在会话中受到维护。问题是每个portlet都有它自己的相关页面流的“有限范围的”实例。弹出窗口用于默认(无限制范围)页面流。
什么是jpfScopeID,它的作用是什么?
在8.1SP2之前,我们添加了一个用来处理将与某个特定范围关联的*any*请求的方法。因此,如果想将弹出窗口用于存在于portlet中的页面流,那么可以将一个特殊的请求参数("jpfScopeID")添加到URL,以标识目标范围(在这里是portlet-ID)。每个范围都有它自己的对当前页面流和嵌套页面流的当前堆栈的看法。
BEA工程师Richard Feit编写了一个演示此功能的示例。该实例将弹出一个窗口,允许用户向*portlet's*页面流实例提交值。
还有其他一些很好的javascript,当用户在弹出窗口中提交表单时可用它们关闭窗口和刷新portlet。尽管如此,要关注的重点仍然是“jpfScopeID”请求参数的使用。
在附带的示例中有一个portlet,在8.1 SP2中,可以将它放入(任意次数)一个新门户中。
设置:
- 在应用程序中创建一个默认门户应用程序和一个门户Web项目。
- 右击文件夹弹出窗口并将它导入web项目。
- 创建一个门户,并根据需要将.portlet文件拖放到该门户中。
- 构建并运行该门户。
- 单击某个portlet中的弹出链接,输入任意值并提交。
- 您可以看到该门户将具有输入到弹出窗口中的值。
- 类似地,可以单击其他portlet中的弹出链接,并看见值被保存在每个portlet中。弹出窗口值并不能覆盖以前的值。每个portlet实例都会获得它自己的页面流实例。
示例
popup.zip - 关于在portlet和页面流中使用弹出窗口的示例。
原文出处:http://dev2dev.bea.com/blog/rvimala/archive/2006/11/issues_with_pop.html