在Portlet之间共享对象而不使用Session变量

时间:2011-04-07 15:56:06

标签: java web-applications tomcat portlet

目前,我们有两种与搜索相关的portlet。第一个是运行搜索,我们称之为SearchPortlet,第二个是格式化和显示结果,我们称之为ResultPortlet。

随着时间的推移,这些portlet的代码经历了一系列突变,以满足客户的需求。我们已经达到了这样的程度,即对任一portlet的任何更改都会导致打开数十个错误报告。为了共享搜索结果,Portlet使用PortletSession对象上设置的变量。这导致各种各样的条件语句遍布整个地方,试图管理会话中的对象,并确保在适当的时候删除,读取或替换它们。

重写这些portlet时,我不希望与原始开发人员犯同样的错误。但是,与此同时,我不得不承认,我对Portlets有点警惕,并且没有以任何方式编写任何共享数据。似乎two ways要进行inter-portlet通信。

  1. 公开呈现参数
  2. Portlet活动
  3. 由于我在SearchPortlet和ResultPortlet实例之间共享的东西是一个SearchResult对象,我猜测Portlet事件是我最好的选择,因为渲染参数只是String对象。

    就要求而言 - 当用户在SearchPortlet中运行搜索时,SearchResults必须可用于ResultPortlet实例,这些实例可能位于同一页面上,也可能位于站点的其他部分上。此外,大量用户可能同时运行搜索,并且用户之间不应共享SearchResults

    用户还可以通过单击结果页面上的“过滤依据”链接来进一步过滤搜索,但我不希望ResultsPortlet与运行搜索有任何关系。当用户点击链接以运行另一个搜索时,ResultsPortlet是操作的目标(我认为),所以我可能需要生成一个事件以发送到SearchPortlet,然后可以运行搜索然后依次生成进一步的结果集..但是哪个SearchPortlet会将事件发送给?也许我应该完全废除单独的搜索和结果portlet的想法?我还不确定。

    所以最后,我的问题是:到目前为止我的思维是否正确?我错过了什么吗?你认为我需要注意哪些问题?你有没有做过类似的事情,如果有的话,它是怎么回事?

    提前感谢您的任何反馈。

    编辑:另一个相关的link

0 个答案:

没有答案