2007-10-15
Oracle Portal 个人开发经验总结
关键字: portal
1:在deregister一个provider时,有可能这个provider的url已经不可用了,但是portal还是会尝试去链接provider,直到timeout,如果timeout时间比较长,deregister的时间就会很长.
解决办法:先Edit Registration,把provider的链接给程一个可用的url链接,然后在deregister,这样速度会快很多。
2: Export Oracle Portal Instance时,provider信息也会被导出来,但是在import时,Oracle Portal会检查要注册的Provider链接信息,如果目标机器跟源机器的Provider源不能够连通,那么导出到provider就不会被注册到目标portal instance上(我们在部署portal时就出现了这个问题,我们在内网开发的,目标机也是vpn内网)。
解决办法:先把portlet部署到目标机上,然后在把本地的provider注册信息都改成目标机的url,再export,在到目标机import,这样provider注册信息就能够被导到目标机器上了。
3:开发Portlet中JS问题,portlet开发不同于普通页面的开发,因为portlet很可能被加入到任意一个portal页,同时一个portlet可能被加入portal页多次,那么在portlet里写javascript时命名就注意防止命名冲突,而且如果是多人协作开发portlet时,js命名尤为重要,要有一个好的命名规则,否则就会出现portlet单个跑都没有问题,但是一放到portal上就出不来了。
解决办法:使用Extjs的命名空间+好的命名规则+PDK-Java的PortletRenderRequestObj.getQualifiedParameter().
4: 开发Portlet中JS引用库问题,不要在每个portlet中都引用公共JS库文件,例如prototype.js, ext-base.js等等,这样会造成js库重复引用。
解决办法:把JS库应用放到HTML Template里去,在portlet里不包含基础JS库的引用。
5:Ajax跨域提交问题,这个在portal开发中经常出现,因为provider很可能(大多数情况下都不是跟portal server在一台机器上),Ajax跨域请求会出错。
解决办法:创建一个AjaxProxy工程,部署到portal server上,代码详见http://ivanl.javaeye.com/blog/47910 这篇blog,在portlet中都通过ajaxProxy来进行Ajax请求调用。
6:Parameter传递,前文提到过portlet打多数情况下都不会跟portal instance在一台机器上,用户请求的又都是portal page,这样在url后面加上参数是无法直接传给portlet的。
解决办法:
6.1: 在portal page上建立参数,用来接受url中的参数。
6.2: 在portlet 的provider.xml里声明输入参数,准备在portlet中使用。
6.3: 在Portal page中的properties->parameters tab中mapping page parameter and portlet parameter.
7: portlet一定是html片段,不能包含<html>,<body>等标签,我见过有人这么加过(暴汗)。
8:整个页面是div+span的梦想,在portal中不能实现,因为每一个region就是一个table,Oracle poral是用table来布局的。
解决办法:别想了。
解决办法:先Edit Registration,把provider的链接给程一个可用的url链接,然后在deregister,这样速度会快很多。
2: Export Oracle Portal Instance时,provider信息也会被导出来,但是在import时,Oracle Portal会检查要注册的Provider链接信息,如果目标机器跟源机器的Provider源不能够连通,那么导出到provider就不会被注册到目标portal instance上(我们在部署portal时就出现了这个问题,我们在内网开发的,目标机也是vpn内网)。
解决办法:先把portlet部署到目标机上,然后在把本地的provider注册信息都改成目标机的url,再export,在到目标机import,这样provider注册信息就能够被导到目标机器上了。
3:开发Portlet中JS问题,portlet开发不同于普通页面的开发,因为portlet很可能被加入到任意一个portal页,同时一个portlet可能被加入portal页多次,那么在portlet里写javascript时命名就注意防止命名冲突,而且如果是多人协作开发portlet时,js命名尤为重要,要有一个好的命名规则,否则就会出现portlet单个跑都没有问题,但是一放到portal上就出不来了。
解决办法:使用Extjs的命名空间+好的命名规则+PDK-Java的PortletRenderRequestObj.getQualifiedParameter().
4: 开发Portlet中JS引用库问题,不要在每个portlet中都引用公共JS库文件,例如prototype.js, ext-base.js等等,这样会造成js库重复引用。
解决办法:把JS库应用放到HTML Template里去,在portlet里不包含基础JS库的引用。
5:Ajax跨域提交问题,这个在portal开发中经常出现,因为provider很可能(大多数情况下都不是跟portal server在一台机器上),Ajax跨域请求会出错。
解决办法:创建一个AjaxProxy工程,部署到portal server上,代码详见http://ivanl.javaeye.com/blog/47910 这篇blog,在portlet中都通过ajaxProxy来进行Ajax请求调用。
6:Parameter传递,前文提到过portlet打多数情况下都不会跟portal instance在一台机器上,用户请求的又都是portal page,这样在url后面加上参数是无法直接传给portlet的。
解决办法:
6.1: 在portal page上建立参数,用来接受url中的参数。
6.2: 在portlet 的provider.xml里声明输入参数,准备在portlet中使用。
6.3: 在Portal page中的properties->parameters tab中mapping page parameter and portlet parameter.
7: portlet一定是html片段,不能包含<html>,<body>等标签,我见过有人这么加过(暴汗)。
8:整个页面是div+span的梦想,在portal中不能实现,因为每一个region就是一个table,Oracle poral是用table来布局的。
解决办法:别想了。
- 14:02
- 浏览 (1569)
- 论坛浏览 (1902)
- 评论 (4)
- 分类: 技术天地
- 相关推荐
评论
今天又碰到了一个portal page传参数问题。
问题描述:我在html template里使用portal tags #PAGE.CUSTOMIZEPAGE#,这个tag会render一个链接,指向本页的personalize page,在personalize page里可以只有设置portlet的布局,增加删除portlet,而不影响其它用户,这个功能很好,但是在返回页面时,原来页面url的参数就不见了。
问题分析:#PAGE.CUSTOMIZEPAGE# render出来的链接回把原页面的链接当成一个参数p_back_url传给personalizepage,但是原页面里带的参数,他就会截去
例如源页面url为http://some.com/portalPage?pageParam=abc
p_back_url子会等于http://some.com/portalPage,问号后面的都回被截去,导致在personalize后点击close,原来的页面参数丢失。
解决办法:自己写js,把丢失的页面参数拼在p_back_url后面。
疑问:我觉得这种解决办法不是很好,不知道有没有更好的解决办法?
问题描述:我在html template里使用portal tags #PAGE.CUSTOMIZEPAGE#,这个tag会render一个链接,指向本页的personalize page,在personalize page里可以只有设置portlet的布局,增加删除portlet,而不影响其它用户,这个功能很好,但是在返回页面时,原来页面url的参数就不见了。
问题分析:#PAGE.CUSTOMIZEPAGE# render出来的链接回把原页面的链接当成一个参数p_back_url传给personalizepage,但是原页面里带的参数,他就会截去
例如源页面url为http://some.com/portalPage?pageParam=abc
p_back_url子会等于http://some.com/portalPage,问号后面的都回被截去,导致在personalize后点击close,原来的页面参数丢失。
解决办法:自己写js,把丢失的页面参数拼在p_back_url后面。
疑问:我觉得这种解决办法不是很好,不知道有没有更好的解决办法?
lyon_ding 写道
呵呵,楼主总结的东西对我很有帮助。请教一个问题。
在 oracel portal 上已经部署了一个 war。
后来该 war 中又新增了几个 porlet,请问怎样增量部署?
或者有没有彻底卸载portlets,或彻底清除已经注册的 provider 的办法?
在 oracel portal 上已经部署了一个 war。
后来该 war 中又新增了几个 porlet,请问怎样增量部署?
或者有没有彻底卸载portlets,或彻底清除已经注册的 provider 的办法?
1:新增portlet后,redeploy你的war/ear就可以
2:进portal welcome->navigator->provider->registered provider->unregister provider
发表评论
该博客是同时发布到论坛的,无法评论在论坛已被锁定的帖子
最新评论
-
使用ubuntu作为工作桌面详 ...
Oracle的Oracle SQLDeveloper可以用也可以把windowz ...
-- by zhoun -
使用ubuntu作为工作桌面详 ...
Ivan Li 写道moonjava 写道一些数据库的客户端呢? Oracle可 ...
-- by moonjava -
使用ubuntu作为工作桌面详 ...
moonjava 写道一些数据库的客户端呢? Oracle可以用Oracle S ...
-- by Ivan Li -
使用ubuntu作为工作桌面详 ...
写得不错!只是觉得linux下顺手的软件太少
-- by vdgame -
使用ubuntu作为工作桌面详 ...
一些数据库的客户端呢?
-- by moonjava







评论排行榜