我有一个 product.xhtml 文件和一个 ProductBean。我使用 /product/{id} 访问产品,因此在 product.xhtml 中使用了一个 viewParam,其 value=ProductBean.id。问题在于,我在 bean 内部使用了一个带有 PostConstruct 注释的 init 函数,以填充产品的详细信息。为此,我需要 id 调用外部函数。我猜测 init 在 viewParam 设置 bean 的 id 之前就被调用了,因此在 init 中我无法调用外部函数,因为 id 还没有设置。我做错了什么,该如何解决?
更新
我找到了问题所在。我认为 viewParam 方法适用于 CDI bean,而 ManagedProperty 方法适用于 JSF bean。
现在我还有另一个问题。我的 CDI bean 是 RequestScoped 的,当渲染 product.xhtml 时,bean 被创建,然后会被丢弃。有趣的是,我在该 bean 中有一个函数,在调用时,可以读取 id(我假设这是因为与 view param 相关),但不能读取任何其他属性。有什么办法解决这个问题?
<f:viewParam>
不特定于CDI。无论谁管理bean,它都可以工作。@ManagedProperty
确实仅在JSF@ManagedBean
中起作用,但这不过是显而易见的,因为@ManagedProperty
是JSF特定的注释,而不是CDI特定的注释。 - BalusC