gpt4 book ai didi

jsf - 跨多个 View 持久化 ViewScoped bean

转载 作者:行者123 更新时间:2023-12-05 01:21:14 29 4
gpt4 key购买 nike

好吧,我知道范围问题总是会出现,但我对解决方案的方法略有不同感兴趣。 @ViewScope@RequestScope之间的奇妙桥梁和 @SessionScope .

但是仍然有一个常见的用例(至少对我而言)我真的不想使用 @SessionScope但我需要几个 View 的数据。一个非常简单的案例是,当我根据之前的选择将多个数据表链接在一起时。

完全可以使用<f:paramView>并在地址中传递一个甚至几个数据作为参数,然后再次从数据库中检索所有内容。我更感兴趣的是找到一种方法来创建 beans 状态/变量的“快照”,创建新的 @ViewScope然后将“快照状态”“恢复”到新 bean。

有这样的东西吗?想法?意见?

最佳答案

我不知道这是否是“可接受的解决方案”,但我已经实现了一个对我有用的想法。 (感谢反馈!)

所以我创建了一个 @SessionScoped带有几个静态 map 的类:

private static Map<String, Object> objectVariableMap;

// Getters, setters and methods etc. are omitted for simplicity

我的想法是我已经指定了一个接受 String 作为键和 Object 作为值的映射。我特别没有设置对象类型以允许我在其中存储任何 类型的对象。需要注意的是,您在检索对象时需要确定对象的类型,以便可以将其转换回其原始类型。

现在是时候设置第一个 @ViewScoped 的数据了.我生成一个随机 UUID(或任何你想要的)作为 Map key,然后将 value 设置为我正在使用的对象(即 this ,或者您可能想要传递给下一个 View 的任何其他对象)。将键、值保存到映射中并将 URL 参数设置为键。

我从不热衷于在 URL 参数中传递用户 ID 等数据(即使是加密的)。这个想法还有一个额外的好处,即提供具有可指定生命周期的一次性 URL 值。

在接收端(即新的 @ViewScoped bean,或与此相关的任何其他范围),您使用 <f:paramView> 读取 URL 参数(映射键)然后使用 preRenderView检索和设置对象的事件。

此时您可以选择从 Map 中删除 key 对并使检索该对象的能力失效,或者您可以通过简单地更新对象(如果有任何更改)将 key 对保留更长的时间。

更新:从概念上讲,这真的很成功(至少对我而言)。我围绕这个概念创建了一些有用的方法和类,以使其更加通用。如果有人想要更具体的说明,或者如果有人想要,我什至可以创建一个小型图书馆。

关于jsf - 跨多个 View 持久化 ViewScoped bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15566310/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com