Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSF/CDI:在页面呈现后结束对话?_Jsf_Jakarta Ee_Jsf 2_Cdi_Conversation Scope - Fatal编程技术网

JSF/CDI:在页面呈现后结束对话?

JSF/CDI:在页面呈现后结束对话?,jsf,jakarta-ee,jsf-2,cdi,conversation-scope,Jsf,Jakarta Ee,Jsf 2,Cdi,Conversation Scope,我遇到过这样一种情况:我使用JSF2.2呈现了一个多步骤向导,并部署在Wildfly 10/JBoss EAP上。我们的向导存在于CDI对话中,用于维护所有页面的状态。向导的最后一步完成后,会将一条记录保存到数据库中,我会调用conversation.end()来结束工作流。我希望显示对话范围内存在的值,以向用户指示进程已完成。但是,当我结束对话时,该值显然会消失,因为它是在对话范围中设置的 有没有办法告诉CDI在最后一页完成渲染后结束我的对话?是否有更好的方法来管理对话?据我所知,没有任何方法

我遇到过这样一种情况:我使用JSF2.2呈现了一个多步骤向导,并部署在Wildfly 10/JBoss EAP上。我们的向导存在于CDI
对话中,用于维护所有页面的状态。向导的最后一步完成后,会将一条记录保存到数据库中,我会调用
conversation.end()
来结束工作流。我希望显示对话范围内存在的值,以向用户指示进程已完成。但是,当我结束
对话
时,该值显然会消失,因为它是在
对话
范围中设置的


有没有办法告诉CDI在最后一页完成渲染后结束我的
对话
?是否有更好的方法来管理
对话

据我所知,没有任何方法可以像您所希望的那样操纵对话范围。除非在重定向用户并显示值后可以调用
conversation.end()
。但这将不再适用于向导的生命周期

但一个相对简单的解决方法是使用任何比对话更广泛的范围,并将价值存储在其中。为了坚持使用纯CDI,我会选择
@SessionScoped
(毕竟,会话是在会话中进行的)


在调用
conversation.end()之前不久,将所需的值存储到会话范围的bean变量中,并从那里显示它。

我对此非常生疏,但您不能只保留要在
@SessionScoped
@ViewScoped
注释bean?或DeltaSpike的
@ViewScoped
中显示的值吗?我会选择Delta Spike中的ViewScoped。。。它是“纯cdi”,但是一个扩展。不是自定义框架,但需要引入DeltaSpike依赖项才能获得该框架。很多人都反对添加任何额外的内容,甚至项目经理/领导都禁止这样做。所以我试着用最简单的方式来陈述。排序或者确实发生了很多。。。。但是在我(有时并非如此)的拙见中,任何反对添加好的现有扩展(如Delta Spike或OmniFaces(甚至PrimeFaces))并要求编写自定义代码的项目负责人,或者使用相对复杂的对话结构(viewaccesscoped非常适合)的项目负责人都应该被解雇;-)(无论如何,我反对明确的项目负责人或“架构师”。团队应该是项目负责人和/或架构师。)