12

product.xhtmlとProductBeanがあります。/ product / {id}を使用して製品にアクセスするため、product.xhtmlにvalue=ProductBean.idのviewParamがあります。問題は、Bean内で、製品の詳細を入力するためにPostConstructアノテーションを指定したinit関数を使用することです。これを行うには、外部関数を呼び出すためのIDが必要です。viewParamがBeanのIDを設定する前にinitが呼び出されるので、initの内部では、idがまだ設定されていないため、外部関数を呼び出すことができないと思います。私は何を間違っているのですか、そしてこれをどのように修正しますか?

アップデート

何が悪かったのかわかりました。viewParamメソッドはCDIBeanで機能すると思いますが、ManagedPropertyメソッドはJSFBeanで機能します。

もう1つ問題があります。私のCDIBeanはRequestScopedであり、product.xhtmlがレンダリングされると、Beanが作成され、後で破棄されると思います。面白いことに、そのBean内に関数があり、呼び出すとid(view paramに接続されているために発生すると思います)を読み取ることができますが、他のプロパティは読み取ることができません。これを修正する方法はありますか?

4

1 に答える 1

26

<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() {
    // ...
}

これは本質的に少しハックであることに注意してください。今後のJSF2.2は、唯一の目的のために、より賢明な新しいタグを提供し<f:viewAction>ます。

<f:metadata>
    <f:viewParam name="foo" value="#{bean.foo}" />
    <f:viewAction action="#{bean.onload}" />
</f:metadata>

参照:

于 2012-04-21T17:58:53.470 に答える