我刚刚意识到我的向导组件忘记了过去的步骤,因为我正在使用@RequestScoped向导支持bean。使用@SessionScoped可以工作,但很难看。 因此,我试图让它使用@ConversationScoped工作,但必须实现一些奇怪的效果。 (也许出来的J2EE经验)CDI对话和primefaces向导组件
鉴于这种向导的支持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();
}
...
}
我的歌物体看起来是这样的:
@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中,我的调试确认了这种情况 - 但只有一个向导步骤的情况。
对此的任何帮助将非常感激。
问候,马塞尔。
谢谢 - 我想只有一个富客户端ajax-only页面,没有进一步的位置变化发生。默认的CDI实现不提供ManagedBean方法附带的ViewScope。所以我决定看看Seam 3和它的“Faces”模块,它使用ViewScoped扩展了CDI。完成后,我根据请求从RequestScoped更改为ViewScoped,但现在向导状态一旦加载就保持不变。 (感觉像SessionScoped)会话开始并正确停止,但ConversationScoped bean始终保持不变。 – Marcel 2011-06-19 10:08:07