JSF 1.2:太多的小 session beans:它不好吗?还有什么替代品

JSF 1.2: Too many small session beans: Is it bad and what the alternatives

有一个 JSF 1.2 应用程序在可观察的未来无法切换到另一个 version/technology。通常需要显示一个小的(模态)表单,该表单需要在多个请求中保持某种状态。工作完成(确认或取消)后,在再次打开表单之前不需要此状态。有很多这样的形式,session objects(单独的 per-form session bean 或特殊巨大 session bean 的成员)用于保持它们的状态. sessions 可能会持续足够长的时间,可能会持续整个工作日。所以很多 objects 不必要地加载 session 范围。

是否有一种简单、标准的方法来清洁不再需要的 session object?您对此有何解决方案?

试试看这里 link 一旦“工作完成”,我会运行删除所有对象。

@亚历克斯,

正如您所提到的,您有多个 view/page 想要在多个请求中 render/preserve 并且在用户会话未过期之前一直存在。 这只是因为 bean 范围是会话,可能你这样做是为了避免多次调用 db 来实现性能,只是避免在每次请求时从数据库重新加载相同的信息。

我认为您可以在用户会话 bean 或您认为最好的任何其他会话 bean 中创建一个集合(根据您的选择,但我建议仅为此目的创建新 Bean)。 在此集合中,您只需将模型数据放入要在页面上显示的内容,不要在上下文文件中注册此 bean。在你需要的地方保留对象,就像你有三个页面。P1、P2 和 P3,在 P3 之后你想从会话中删除模型 1(你的 pojo),然后在导航事件中从集合中删除模型 1。

//Sample code which  help to understand what I am saying 


@Session
UserBean {
  Map tempBean<Obejct,String>=new HashMap<Object,String>();

        //just for example  suppose you want to load Model1

        public Model1  viewP1() {
            if(tempBean.get("P1info")==null){//key for P1 view 
            Model1 m1=db.getP1info();
            tempBean.put("P1info",m1);
        }

        return (m1)tempBean.get("P1info");
    }
}

要从会话中删除 Model1 数据,只需将键 "P1info" 的值设置为 null 在上述代码的情况下,您可以使用 Wea​​kHashMap,如果您不想从 Map.But 中删除键确保删除事件触发器上的值部分,之后您不想在会话中保留 Model1 值。

我希望这对你的情况有用。如果在实施过程中有任何问题,请告诉我,因为我没有分享工作代码,只是展示了概念。