我刚刚意识到我的向导组件忘记了过去的步骤,因为我正在使用@RequestScoped向导支持bean。使用@SessionScoped会起作用但很难看。 因此我尝试使用@ConversationScoped使其工作,但必须实现一些奇怪的效果。 (可能超出J2EE经验)
鉴于这种向导支持bean:
@Named
@RequestScoped
public class EvaluationWizard implements Serializable {
...
@Inject
private Conversation conversation;
@Inject
private Song selectedSong;
...
public void setSelectedSong(final Song song) {
selectedSong = song;
}
public Song getSelectedSong() {
return selectedSong;
}
public void onDialogOpen(final ActionEvent actionEvent) {
conversation.begin();
}
public void onDialogClose(final CloseEvent closeEvent) {
conversation.end();
}
...
}
My Song对象如下所示:
@Named
@ConversationScoped
public class Song extends SelectItem implements Serializable {
private String title;
public void setTitle(final String title) {
this.title = title;
}
@Override
public String toString() {
return title;
}
}
该向导包含几个步骤以进行设置。 selectedSong属性是列表中的项目,表示当前选定的歌曲。 此选择保存在“EvaluationWizard”支持bean中,我的调试确认是这种情况 - 但只有一个向导步骤才会出现这种情况。
对此的任何帮助都会非常感激。
问候,马塞尔。
答案 0 :(得分:1)
Primefaces向导组件不适用于您正确的RequestScoped bean。您必须使用@SessionScoped
或@ViewScoped
。
我个人喜欢使用ViewScoped,因为当您导航到页面时将创建bean,并在您离开页面时死亡。这为您提供了持久化bean的好处,而不会使会话混乱。
答案 1 :(得分:0)
是@RequestScoped不起作用。直到今天我们还使用了@SessionScoped。今天我了解到最好使用@ViewAccessScoped,因为与@SessionScoped相比,你获得了窗口隔离。在我们的应用程序中,我们遇到了很多由@SessionScoped引起的错误。我只是用@ViewAccessScoped替换它,我用它在10分钟内解决了17张不同的门票。