gpt4 book ai didi

jsf-2 - JSF bean : call @PostConstruct function after ViewParam is set

转载 作者:行者123 更新时间:2023-12-04 01:35:23 27 4
gpt4 key购买 nike

我有一个 product.xhtml 和一个 ProductBean。我使用/product/{id} 来访问产品,因此我在 product.xhtml 中有一个 viewParam,其 value=ProductBean.id。问题是在 bean 内部我使用了一个带有 PostConstruct 注释的 init 函数来填充产品的细节。为此,我需要 id 来调用外部函数。我猜虽然 init 在 vi​​ewParam 设置 bean 的 id 之前被调用,因此在 init 内部我不能调用外部函数,因为 id 尚未设置。我做错了什么,我该如何解决?

UPDATE



我发现出了什么问题。我认为 viewParam 方法适用于 CDI bean,但 ManagedProperty 方法适用于 JSF beans..

我现在还有一个问题。我的 CDI bean 是 RequestScoped 并且当 product.xhtml 呈现时,bean 被创建,我猜后来被丢弃了。有趣的是,我在那个 bean 中有一个函数,当我调用它时,我可以读取 id(我认为这是因为连接到 View 参数),但不能读取任何其他属性。任何想法如何解决这个问题?

最佳答案

您需要一个 <f:event type="preRenderView">相反。

<f:metadata>
<f:viewParam name="foo" value="#{bean.foo}" />
<f:event type="preRenderView" listener="#{bean.onload}" />
</f:metadata>


public void onload() {
// ...
}

请注意,这本质上是一个小技巧。即将到来的 JSF 2.2 将提供一个新的、更合理的标签,用于唯一目的: <f:viewAction> .
<f:metadata>
<f:viewParam name="foo" value="#{bean.foo}" />
<f:viewAction action="#{bean.onload}" />
</f:metadata>

另见:
  • ViewParam vs @ManagedProperty(value = "#{param.id}")
  • Communication in JSF 2.0 - Processing GET request parameters
  • 关于jsf-2 - JSF bean : call @PostConstruct function after ViewParam is set,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10261453/

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