2012-06-04 71 views
0

我遇到了一些JSF導航和傳遞參數的問題;這是該方案:JSF導航和傳遞參數

三個頁面:藝術家,專輯,曲目

對於每一個頁面一個bean:ArtistBean,AlbumBean,TrackBean(會話範圍)

藝術家頁面包含藝術家列表,每個artistname是一個鏈接,當點擊它時,您可以導航到列出該藝術家專輯的專輯頁面。同樣,當點擊相冊時,您可以導航到該專輯的曲目列表的曲目頁面。

的鏈接如下所示:

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

豆子看起來如下:

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。我也有一些奇怪的行爲,主要是顯示曲目的鏈接只在點擊兩次時才起作用,而顯示相冊的鏈接只需單擊一次即可工作。

在此先感謝!

+0

我不確定你具體問什麼。你基本上是問「這是我的代碼,是不是?」這是一個非建設性的問題,因此對於Stack Overflow而言是偏離的,並且更適合於通用論壇。至於你的雙擊問題(其*看起來像是你真正的具體問題),請閱讀http://stackoverflow.com/questions/2118656/hcommandlink-hcommandbutton-is-not-being-invoked的第7條 – BalusC

+0

我的理由詢問它是否是「處理導航的好方法」與我的鏈接無法按預期工作的事實相關。我應該用不同的措詞來說明這一點。這仍然是一個問題,我有興趣知道將參數傳遞給另一個bean的方式是否合理,或者可能會給我帶來問題。 – nivis

+0

經過大量的反覆試驗後,我在將表單綁定移除到我用於設置表單消息的請求作用域bean上時發揮了作用。我不知道爲什麼會導致問題。 – nivis

回答

1

我不知道你在做什麼是錯的。但我覺得它很複雜。一個更直接的解決方案似乎對我來說如下:

你有3個豆和3頁。很明顯,藝術家豆被稱爲藝術家頁面等。

通過鏈接完成頁面之間的導航並添加參數。 在相冊bean上,讀取傳遞的參數並根據該參數填寫相冊列表(您可以使用名稱或ID作爲鍵值)

同樣適用於跟蹤信息。

這樣你就不需要在會話範圍內擁有bean。更好地使用視圖範圍。

+0

我改變了根據你的建議使用h:鏈接與f:參數,它的工作原理。謝謝! – nivis