CDI对话和primefaces向导组件
我刚刚意识到,当我使用@RequestScope向导支持bean时,我的向导组件忘记了过去的步骤。使用@SessionScoped会起作用,但很难看。 因此,我试图使用@ConversationScope使其工作,但不得不意识到一些奇怪的效果。(可能没有J2EE经验) 给定这种向导支持bean:CDI对话和primefaces向导组件,primefaces,cdi,wizard,Primefaces,Cdi,Wizard,我刚刚意识到,当我使用@RequestScope向导支持bean时,我的向导组件忘记了过去的步骤。使用@SessionScoped会起作用,但很难看。 因此,我试图使用@ConversationScope使其工作,但不得不意识到一些奇怪的效果。(可能没有J2EE经验) 给定这种向导支持bean: @Named @RequestScoped public class EvaluationWizard implements Serializable { ... @Inject
@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中,我的调试确认了这一点——但这只是一个向导步骤的情况
在这方面的任何帮助都将不胜感激
您好,Marcel。Primefaces向导组件将无法与RequestScoped bean一起工作。您是对的。您必须使用
@SessionScoped
或@ViewScoped
我个人喜欢使用ViewScoped,因为bean将在导航到页面时创建,而在离开页面时会消失。这为您提供了持久化bean的好处,而不会使会话混乱。Yes@RequestScoped将不起作用。直到今天,我们还使用了@SessionScoped。今天我学到了使用@ViewAccessScope更好,因为与@SessionScope相比,您可以获得窗口隔离。在我们的应用程序中,我们发现了许多由@SessionScoped引起的bug。我刚刚用@viewAccessScope替换了它,并用它在10分钟内解决了17个不同的问题。谢谢-我希望只有一个富客户端ajax专用页面,没有进一步的位置更改。默认CDI实现不提供ManagedBean方法附带的ViewScope。所以我决定看看Seam 3及其“Faces”模块,它通过ViewScope扩展了CDI。这样做之后,我根据请求从RequestScope更改为ViewScope,但现在向导状态在加载后保持不变。(感觉像SessionScoped)对话正确启动和停止,但ConversationScoped bean始终保持不变。