2012-06-04 41 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