1

我使用 JSF2.0 和 WELD-CDI 和 jboss AS7。我在 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()之后,仍然没有改变变量并且所有变量的值都保持不变。为什么?!

在执行“conversation.end()”之后,变量值没有被重置。为什么变量没有被重置?请帮帮我。

4

1 回答 1

1

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

于 2015-05-09T15:18:22.700 回答