- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
好吧,我知道范围问题总是会出现,但我对解决方案的方法略有不同感兴趣。 @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/
我们正在将我们的项目迁移到针对 JBoss Wildfly 的 Java EE 7。 我们有几十个 @ManagedBean @javax.faces.bean.ViewScoped (旧的非 CDI
引自此 nice article , The new view scope should solve exactly those issues. A @ViewScoped bean will liv
我已经使用 JSF 很多年了,在下一个项目中,我们的目标是使 Web 层尽可能无状态。我正在探索的一种可能性是删除 @ViewScoped bean 类支持@RequestScoped (根据需要加上
这个问题在这里已经有了答案: JSF 2.1 ViewScopedBean @PreDestroy method is not called (2 个回答) 2年前关闭。 我有一个 @ViewScop
我有一个按钮,点击那个按钮我有客户端代码来设置 viewScope 值: var val = 'TEST_VALUE'; "#{javascript: viewScope.testVal =
我正在使用 JSF 构建一个单页应用程序,如下所示: 左侧的菜单是动态生成的,单击其中一个子菜单会创建一个选项卡,我在其中显示 中的内容。 . 菜单和选项卡代码:
在应用程序中,我需要知道 viewScope 变量是否已初始化。创建 viewScope 变量时,该值可能为 null。所以 viewScope.isEmpty("SomeName") 并没有告诉我它
我有一个按钮,点击那个按钮我有客户端代码来设置 viewScope 值: var val = 'TEST_VALUE'; "#{javascript: viewScope.testVal =
我正在使用带有多个和 fileUploadListener 方法的 primefaces fileUpload。每次上传的每个文件都会调用监听器,我想将每个文件存储在 arrayList 中,并在上传
如果我们没有相关页面所需的信息,我在从 View 作用域 bean 进行重定向时遇到问题。 @PostContruct 中的日志条目在与尝试呈现自身而不是遵循我的重定向的 View 相关的 NPE 之
此代码总是抛出 ViewExpiredException @ManagedBean(name = "test") @ViewScoped public class test implements Se
我要将一个参数从一个页面 (Facelet) 传递到范围为 View 范围的托管 Bean。 我试着这样做: import javax.faces.bean.ManagedBean; import j
我正在使用 JSF 2.0 和 Primefaces 3.4.2,我有一个使用延迟加载填充的数据表。 当我查看 managedbean 的范围时,数据表 selectedRow 给出空指针异常。如果我
使用下面的代码,我在 selectOneRadio 上使用监听器重定向到 url 中包含查询字符串的页面。 问题是,当我被重定向时,newsTitle 和 selectedNews 的值为空。为什么是
我已经看到有关调用 bean 构造函数和 ViewScope 的其他问题,但我仍然遇到困难。我看到的问题涉及我的应用程序中的两个特定页面。第一个是数据表(现在它填充了随机生成的数据,但最终会调用数据库
我想知道在两个 ViewScoped bean 之间传递数据(对象)的最佳实践是什么。 由于出色解释的问题,它们需要在 View 范围内here (简而言之:在这两个 View 中,我都在 h:dat
我的 h:commandButton "Login"有问题:当我使用 @ViewScoped 并按下此按钮时,会出现 ViewExpiredException,但是当我使用 @SessionScope
这个问题在这里已经有了答案: @ViewScoped calls @PostConstruct on every postback request (1 个回答) 5年前关闭。 我在 JSF 2.2.
在 Spring 3 和 JSF 2.0 中,当我们想要使用 JSF View 范围时,我们必须引入自定义 ViewScope 实现并指示 Spring 通过 CustomScopeConfigure
我在 jsf facelet 上有一个日历、编辑器、fileUpload 和一个 dataTable primefaces 控件。 代码如下, #{lbl.SSTitle}
我是一名优秀的程序员,十分优秀!