1

JSFページ間で、Beanから別のページにパラメーターを渡そうとしています。私はそれが一般的な質問であることを知っています、実際、私はそれを書き留める前にいくつかのアプローチを試しました。これを行うために、両方のBeanをセッションスコープに配置し、最初のBeanに次を追加しました。

<p:commandButton value="Submit" type="submit"
    actionListener="#{sourceBean.save}" action="success">

    <f:setPropertyActionListener
            target="#{targetBean.foo}" value="#{sourceBean.foo}" />
</p:commandButton>

問題は、これらのBeanをセッションスコープではなくビュースコープに入れたいということです。だから私は私の最初のページを入れようとしました:

<p:commandButton value="Submit" type="submit"
    actionListener="#{sourceBean.save}" action="success">
    <f:param name="foo" value="#{sourceBean.foo}"/>                     
</p:commandButton>

そして2ページ目:

<f:metadata>
<f:viewParam id="foo" name="foo" value="#{targetBean.foo}"
    />
</f:metadata>

問題は、渡された文字列がnullであるため、明らかに、Converterからエラーが発生することです。

管理対象Beanの構成に何かが欠けていると思います。何らかの方法でターゲットBeanとソースBeanをリンクする必要がありますか?この時点で、私はこの構成を持っています:

    <managed-bean>
    <managed-bean-name>targetBean</managed-bean-name>
    <managed-bean-class>guiBeans.TargetBean</managed-bean-class>
    <managed-bean-scope>view</managed-bean-scope>
</managed-bean>
<managed-bean>
    <managed-bean-name>sourceBean</managed-bean-name>
    <managed-bean-class>guiBeans.SourceBean</managed-bean-class>
    <managed-bean-scope>view</managed-bean-scope>
</managed-bean>

別の質問:私のアプリでは、変換中に使用する値foo.idは、オブジェクトを保存するときにデータベースによって自動的に設定されるため、次のように呼び出します。

actionListener="#{sourceBean.save}"

コンバーターはIDを取得し、それを文字列に変換します(必要に応じてその逆も同様です)。そこで、JSFで最初にactionListenerと呼ばれるのか、パラメータを設定する関数と呼ばれるのかを知りたいと思いました。

これが私がnull文字列を取得する理由でしょうか?どうもありがとう。

4

1 に答える 1

1

<f:param>、フォームの送信中ではなく、フォームのレンダリング中に評価されます。問題は、#{sourceBean.foo}値がフォームの送信中にのみ設定され、フォームのレンダリング中には使用できないことを示しています。

基本的に次のように置き換える必要action="success"action="#{bean.action}"あります

public String action() {
    return "success?foo=" + foo.getId();
}

または、ナビゲーションケースを使用している場合

<navigation-case>
    <from-outcome>success</from-outcome>
    <to-view-id>/some.xhtml</to-view-id>
    <redirect>
        <view-param>
            <name>foo</name>
            <value>#{sourceBean.foo.id}</value>
        </view-param>
    </redirect>
</navigation-case>

具体的な問題とは関係なく、は属性をまったくサポートして<f:param> いません。converter目的のプロパティに直接アクセスする必要があります(id上記の例にあります)。

于 2012-11-21T15:01:58.553 に答える