我使用JSF2.0和WELD-CDI以及jboss AS7.I在page-backbean中使用CDI @ ConversiationScope。 要转到一页,我正在使用菜单项。如图所示:
<rich:menuItem
label="redirect to page1"
execute="@this"
action="#{myBean.begin}"/>
在此菜单的操作中,调用以下方法开始对话,然后重定向到所需的页面:
@Named(value = "myBean")
@ConversationScoped
public class MyBean implements Serializable {
@Inject
private Conversation conversation;
public String begin() {
if (!conversation.isTransient()) {
conversation.end();
}
conversation.setTimeout(“1800000”);
conversation.begin();
return "page1";
}
}
和 faces-config.xml :
<navigation-case>
<from-outcome>page1</from-outcome>
<to-view-id>/sample/page1.xhtml</to-view-id>
<redirect/>
</navigation-case>
到目前为止,一切都很好。
但是,如果我再次申请,在执行conversation.end()之后,仍然没有变更变量和变量的所有值都维持。为什么呢?!
在exexute&#34; conversation.end()&#34;之后,变量 - 值未重置。为什么变量未重置?请帮帮我。答案 0 :(得分:0)
当您结束对话时,它变为瞬态。这意味着在结束请求后,它的内容将被销毁。但是,这意味着只要您仍在同一个请求中,调用end()就不会更改bean。 另一种说法是end()的效果被延迟;它只适用于下一个请求。 顺便说一下:字段重置并不是真的;将注入新的bean,这些新的bean当然会为其字段提供初始值。