JSF2.0 ViewScope Bean何时消亡?

JSF2.0 ViewScope Bean何时消亡?,jsf,jsf-2,Jsf,Jsf 2,我想在我的网站上有一个基于Ajax的选项卡式界面 我还希望每个选项卡都有一个bean。 这些bean在进入选项卡时预期为“出生”,在离开选项卡时预期为“死亡” 重要信息-选项卡之间的切换必须是AJAX事件,而不是整页重画 我认为@ViewScoped是这种行为的合适范围,但我一直坚持在离开选项卡时杀死bean的问题上。据我所知,@ViewScopedbean只会在重定向/导航事件中死亡 有没有合适的方法使@ViewScopedbean消亡?我应该使用不同的范围吗 谢谢 更新 阅读BalusC对问

我想在我的网站上有一个基于Ajax的选项卡式界面

我还希望每个选项卡都有一个bean。
这些bean在进入选项卡时预期为“出生”,在离开选项卡时预期为“死亡”

重要信息-选项卡之间的切换必须是AJAX事件,而不是整页重画

我认为
@ViewScoped
是这种行为的合适范围,但我一直坚持在离开选项卡时杀死bean的问题上。据我所知,
@ViewScoped
bean只会在重定向/导航事件中死亡

有没有合适的方法使
@ViewScoped
bean消亡?我应该使用不同的范围吗

谢谢

更新

阅读BalusC对问题的回答是一个很好的迹象:

只要您与同一视图交互,视图范围的bean就会存在 (即,在bean操作方法中返回void或null)。当你 导航到其他视图,例如单击链接或返回 如果操作结果不同,则视图范围的bean将被丢弃 在渲染响应结束时,在下一个请求中不可用

因此,根据这一点,我可以从操作方法返回不同的结果,并使
@ViewScoped
bean死亡。

但要做到这一点,我必须在操作方法(JSF2隐式导航)产生结果后禁用导航,我不知道如何做到这一点(或者这是否是实现我的目标的正确方法)

我将只使用一个ViewScoped bean,将数据显示为一个简单的POJO属性。页面将被初始化

@ManagedBean
@ViewScoped
public class BackingBean {

    private WizardData wizardData;

    public WizardData getWizardData() {
        if (wizardData == null) {
            wizardData = new WizardData();
        }
        return wizardData;
    }

    public void setWizardData(WizardData wizardData) {
        this.wizardData = wizardData;
    }
}

public class WizardData {
    private WizardPage1 page1;
    private WizardPage2 page2;

    public WizardPage1 getPage1() {
        if (page1 == null) {
            page1 = new WizardPage1();
        }
        return page1;
    }

    public void setPage1(WizardPage1 page1) {
        this.page1 = page1;
    }

    public WizardPage2 getPage2() {
        if (page2 == null) {
            page2 = new WizardPage2();
        }
        return page2;
    }

    public void setPage2(WizardPage2 page2) {
        this.page2 = page2;
    }
}
因此,在页面上,当您使用POJO时,将创建POJO,例如

<h:outputText value="#{backingBean.wizardData.page1.someTextToShow}"/>

对于“如何以及何时在JSF中销毁视图范围bean”这一问题可能是相关的。