Jakarta ee 如何结束一次CDI对话并彻底销毁CDIBean的所有变量?

Jakarta ee 如何结束一次CDI对话并彻底销毁CDIBean的所有变量?,jakarta-ee,cdi,weld,conversation-scope,Jakarta Ee,Cdi,Weld,Conversation Scope,我使用JSF2.0、WELD-CDI和JBossAS7CDI@ConversiationScope在页面backbean中。 要转到一页,我使用菜单项,如图所示: <rich:menuItem label="redirect to page1" execute="@this" action="#{myBean.begin}"/> 和faces config.xml: <navigation-case> <from-

我使用JSF2.0、WELD-CDI和JBossAS7CDI@ConversiationScope在页面backbean中。 要转到一页,我使用菜单项,如图所示:

<rich:menuItem 
     label="redirect  to page1"
     execute="@this"
     action="#{myBean.begin}"/>
faces config.xml

<navigation-case>
        <from-outcome>page1</from-outcome>
        <to-view-id>/sample/page1.xhtml</to-view-id>
        <redirect/>
</navigation-case>

第1页
/示例/page1.xhtml
到目前为止,一切都很顺利

但是,如果我再次应用,在执行conversation.end()之后,仍然不会更改变量,并且变量的所有值都会保持不变。为什么


在exexute“conversation.end()”之后,变量值不会重置。为什么变量不会重置?请帮助我。

当您结束对话时,它会变成暂时的。这意味着它的内容将在请求结束后被销毁。然而,这意味着只要您仍然在同一个请求中,调用end()就不会更改bean。 另一种说法是end()的效果被延迟了;它只适用于下一个请求。
顺便说一句:字段并不是真的被重置了;新的bean将被注入,这些新bean当然会为其字段设置初始值。

我相信它的工作方式是结束对话并开始新的对话。在你的代码中,你在哪里开始一个新的页面?我有几个页面,要转到任何特定的页面,我使用menuItem。在菜单的操作中,调用“backBean.begin()”。
<navigation-case>
        <from-outcome>page1</from-outcome>
        <to-view-id>/sample/page1.xhtml</to-view-id>
        <redirect/>
</navigation-case>