JSF bean:设置ViewParam后调用@PostConstruct函数

时间:2012-04-21 17:44:18

标签: jsf-2 managed-bean postconstruct viewparams

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

  

更新

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

我现在还有另一个问题。我的CDI bean是RequestScoped,当渲染product.xhtml时,bean被创建,我猜想以后会被丢弃。有趣的是,我在该bean中有一个函数,当我调用时,我可以读取id(我认为这是因为连接到视图参数)而不是任何其他属性。任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:25)

您需要<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>

另见: