【发布时间】:2013-01-04 18:17:21
【问题描述】:
我的导航案例如下。我有一个登录页面,我可以从中导航到商店页面。此商店页面可以使用两种不同的产品目录。这由给定的 Retailer 对象控制。
从商店页面开始,有多个 bean 和页面将在会话中依赖零售商。切换零售商的事件是来自登录页面的新选择。 我可以通过在选择中触发一个动作然后导航到商店页面来控制会话中的零售商。但这必须在 bean 中的操作处进行控制。
我的问题是从导航栏直接导航到商店页面的情况。所以我需要一些机制来初始化商店页面中的给定零售商。这必须在该页面所依赖的每个 bean 上执行。这应该通过 GET 参数来完成。 我可以在 preRenderView 侦听器中通过复杂的决定来实现这种行为,但我认为这不是更优雅的方式。
因此,潜在的问题是如何拦截到一个页面的直接导航,该页面的数据由多个 bean 管理(无论它们的范围如何),并在会话中引入一些东西,即这些 bean 将在它们的操作中使用。
我已经尝试过了(在 SessionScoped bean 中):
1) 如果我使用 @PostConstruct + @ManagedProperty(with param) 我在实例化 bean 时收到错误,因为 bean 是 SessionScoped
2) 如果我使用 viewParam + preRenderView 事件,则在事件之前注入参数并获得我想要的行为,但是每次加载页面时都会发生这种情况。
我希望这种初始化只发生一次,并且我想使用 GET 参数。
我该怎么做?
【问题讨论】:
-
这绝对不是一种常见的情况,因为您是在会话范围的 bean 而不是请求或视图范围的 bean 上执行此操作的。当您说“每次加载页面时都会发生这种情况”时,您实际上不是指回发(即在每个(ajax)表单提交时)。如果是这样,为什么 bean 不是视图范围?具体的功能需求是什么?
-
你是对的。我想将其转换为 ViewScoped,但我使用的是 Primefaces,动态图形图像加载不适用于 ViewScoped bean。
-
您可能想问一个关于该问题的问题,这样您就不需要为现有解决方法引入其他解决方法,因为您制定了解决方法而不是解决方案。
-
这是 PF 中的正常行为。所以我只是假设我必须使用 SessionScoped。我认为这可能是在 JSF 中实现案例的一种优雅方式,而不是一种解决方法。如果你说这确实是一个不寻常的案例,我会尝试另一种方式来做
-
你对这种“正常行为”有权威的参考吗?这将是一个巨大的错误,或者只是对您的误解。目前还不清楚你到底在说什么问题,但如果我猜没错,这个答案可能已经解释并回答了它:stackoverflow.com/questions/10073905/… 和stackoverflow.com/questions/8207325/…
标签: jsf postconstruct