0

JSFナビゲーションとパラメータの受け渡しに問題があります。これはシナリオです:

3ページ:アーティスト、アルバム、トラック

各ページのBean:ArtistBean、AlbumBean、TrackBean(セッションスコープ)

アーティストページにはアーティストのリストが含まれています。各アーティスト名はリンクであり、クリックすると、そのアーティストのアルバムを一覧表示するアルバムページに移動します。同様に、アルバムをクリックすると、そのアルバムのトラックのリストが表示されたトラックページに移動します。

リンクは次のようになります。

Page artist: <h:commandLink action="#{albumBean.showAlbums(artist)}" value="#{artist.name}" />
Page album:  <h:commandLink action="#{trackBean.showTracks(album)}" value="#{album.name}" />

Beanは次のようになります。

AlbumBean: public String showAlbums(Artist artist){
              [generate list of albums, fetched by page "albums" using getAlbumList()]
              return "Albums";
           }

           public List<Album> getAlbumList(){
              return albumList;
           }

TrackBean: public String showTracks(Album album){
              [generate list of tracks, fetched by page "tracks" using getTrackList()]
              return "Tracks";
           }

           public List<Track> getTrackList(){
              return trackList;
           }

これがナビゲーションを処理するための「OK」な方法であるかどうかはわかりません。まだBeanが表示されていないページのバッキングBeanを呼び出します。また、奇妙な動作もあります。主に、トラックを表示するためのリンクは2回クリックした場合にのみ機能しますが、アルバムを表示するためのリンクは1回クリックするだけで常に機能します。

前もって感謝します!

4

1 に答える 1

1

あなたがしていることが間違っているかどうかはわかりません。しかし、私はそれが複雑だと思います。より簡単な解決策は、私には次のように思われます。

3つのBeanと3つのページがあります。明らかに、アーティストBeanはアーティストページなどで呼び出されます。

ページ間の移動はリンクを介して行われ、パラメータを追加します。アルバムBeanで、渡されたパラメーターを読み取り、そのパラメーターに基づいてアルバムのリストを入力します(キー値として名前またはIDを使用できます)

トラック情報についても同様です。

そうすれば、セッションスコープにBeanを設定する必要はありません。ビュースコープを使用することをお勧めします。

于 2012-06-04T15:21:22.890 に答える