我已经编写了一个新的后端Java组件(扩展UIComponentBase)作为ExtLib Application Layout控件的替代方法。控件需要显示从另一个Notes应用程序中查找的数据集合。数据是用户相关的,并且不会在页面之间进行更改,因此,为避免重复执行查找到其他应用程序,我希望将其存储在会话范围中。 (请注意,因为这是一个布局控件,每页只能有一个。)
我知道我可以使用会话范围的maanged bean(并且已经在之前的迭代中完成)但是数据只需要在此控件中使用,不应该在页面的其他地方使用它可能与一个豆子。所以我的问题是,我应该采取什么样的最佳做法?我应该直接将数据存储在sessionMap中,还是我错过了使用组件stateHolder的技巧?还是我坚持使用豆子?
由于
(编辑澄清)
答案 0 :(得分:1)
看起来你在谈论自己的后端Java组件而不是单个NSF中的自定义控件。
我不确定在什么级别,当你编写自己的本机XPages组件时,stateHolder在调用saveState()时会缓存这些属性。由于Frantisek说的原因,我认为不会高于View,否则如果你在一个XPage上有多个而在另一个XPage上有多个,则不清楚更新哪个实例。它无法在同一页面上同时更新,因此我猜每个都是一个单独的实例。因此,多个页面上的相同组件将是一个单独的谨慎实例。
但是在组件的特定设置器中,写入sessionScope以及私有属性,然后在getter上执行相反操作,没有什么可以阻止你。我不确定你是否想在尝试sessionScope之前尝试内部属性,反之亦然。这取决于您希望如何处理从多个页面更新的相同sessionScope的情况(如果集合可能更改)。