JSF2.0中的managed bean生命周期

    技术2025-07-11  10

    @RequestScoped(默认生命周期)

    为每一次request请求,new一个实体

     

    在实际应用中此周期也为form中的input进行初始化。即:他会被实例化两次1,表单form被展现时。2,表单被提交时

     

    其实可以简单的理解为它生存在 request域里。我发现 commandButton是forword不是redirect的。地址栏没有发生变化。

    比如在a.jsf 提交表单地址栏不会变但是页面是b的页面,如果此时又要提交表单 action 就会到下一个页面c,但是地址栏是b的。

     

    是意味着本表单页面的bean如果是requestScope则下个页面也会取到,地址栏没变就意味着没有重定向,没有销毁request。

     

    @SessionScoped

    顾名思义就是和session一样的生命周期,不过注意此时managed bean必须被序列化implements Serializable

     

    @ApplicationScoped

    不想多说,注意两点1,数据安全,即不想被公布的数据不要放入此域。2,注意线程同步的问题(因为可能会有很多用户同时操作)。

     

    @ViewScoped(jsf2.0新增的域)

    官方解释是:同一用户,相同的页面,相同的bean数据。即我的view视图没变我的bean就在。同样需要被序列化implements Serializable

    常应用于 event handlers 或者 ajax中。每次even发生被捕获了,的确是刷新了页面,但是在默认scoped情况下数据也被保留了下来,ajax更不用说了,我真的不知道viewScoped到底有什么用。

    哦!我发现原因了,

    jsf2.0有两种listeners。

    1,actionListener ,(buttons,hypertext links,image maps)

    自动提交表单

    2,valueChangeListener,(radio button,comboboxe,list boxes,checkboxes,textfields)

    οnclick="submit()" 或者οnchange="submit()"才可以提交form

    关于属性immediate的作用还是不太清楚。好像是跳过验证直接提交。

    (关于此处的疑问已于下一章“JSF2.0中的managed bean生命周期(补充)”中得到初步理解解决)                                                                                                                              

     

    @CustomScoped(value="#{someMap}")   (jsf2.0新增的域)

    bean被存在Map,由程序来控制其生命周期

     

    @NoneScoped

    不存放在域中,即不可被JSF el直接访问。此时bean只是作为其它bean的一部分,被注入对象。

    最新回复(0)