JSF导航和传递参数

时间:2012-06-04 15:10:35

标签: jsf navigation javabeans communication

我在使用JSF导航和传递参数方面遇到了一些问题;这是场景:

三页:艺术家,专辑,曲目

对于每个页面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。我也有一些奇怪的行为,主要是显示曲目的链接只有在我点击两次才有效,而显示专辑的链接总是在点击一次时起作用。

提前致谢!

1 个答案:

答案 0 :(得分:1)

我不确定你做的是不是错了。但我发现它很复杂。在我看来,更直接的解决方案如下:

你有3个豆子和3个页面。显然艺术家豆在艺术家页面中被调用,等等。

通过链接在页面之间导航,然后添加参数。 在Album bean上,读取传递的参数并根据该参数填充相册列表(您可以使用name或id作为键值)

跟踪信息也一样。

这样你就不需要在会话范围内拥有bean了。最好使用视图范围。