0

2 つの managedBean があります。最初の Bean (RequestScoped) は、ah:commandLink を介して 2 番目の Bean (ViewScoped) にパラメーターを送信します。両方の managedBean は同じページにありますが、rich:TabPanel とは別のタブで使用しています。

@ManagedBean
@RequestScoped
public class TheRequestScopedManagedBean {

   private String number
   ...

@ManagedBean
@ViewScoped
public class TheViewScopedManagedBean {

    private String number;
    ...

Rich:dataTable を使用するビューは次のとおりです (アクション メソッドは、rich:tabPanel から 2 番目のタブを表示するためだけのものです)。

// ... another dataTable's columns 
<rich:column>
    <f:facet name="header">Number</f:facet>
    <b>
        <a4j:commandLink value="#{theRequestScopedManagedBean.number}"  
         render="someRichPanel" action="#{anotherBean.showSecondTab}" immediate="true">
             <f:setPropertyActionListener target="#{theViewScopedManagedBean.number}" value="#{theRequestScopedManagedBean.number}" />
        </a4j:commandLink>
   </b>
</rich:column>

ここでの問題は、theViewScopedBean が値を最初にのみ表示し、再度渡そうとするとデフォルト値 (null) が表示されることです。

このウェブサイトでいくつかの質問を見てきました。しかし、私はこの場合何をすべきか本当にわかりません。

4

1 に答える 1

0

action="#{anotherBean.showSecondTab}"ナビゲーションケースが起動します。これにより、ビューとリクエスト スコープの Bean が破棄され、再作成されます (ビュー スコープの Bean の予想される動作と同様)。

EL2.2 を使用している場合は、値をビュー スコープ Bean のメソッドに直接渡すだけで簡単にできます。viewscoped Bean に method があると仮定すると、次のようtakeValueにパラメーターをメソッドに直接渡すことができます。

    <a4j:commandLink value="#{theRequestScopedManagedBean.number}" render="someRichPanel" action="#{theViewScopedBean.takeValue(theRequestScopedManagedBean.number)}" immediate="true"/>

ページ間でデータを送信するためのよりクリーンな方法はまだあります。

于 2013-10-03T01:17:54.033 に答える