如何在Application ScopedBean中刷新数据库数据?

时间:2018-06-21 08:36:56

标签: java refresh javabeans application-scope

this post中,我了解到包含StreamedContend的页面必须与ApplicationScoped bean相关,但是其结果是,如果我修改某些数据(保存在数据库中)在另一页中,使用StreamedContent构建的映像不会考虑这些修改

Bean

@ManagedBean
@ApplicationScoped
public class ImgBean{
    @EJB
    private EJUser ejuser;

    @PostConstuct
    private void init(){
        // init some lists and objects from DB
    }

    public StreamedContent getChart(){
        //build and return 
    }
}

xhtml

<p:graphicImage id="chart" value="#{imgBean.chart}" >
</p:graphicImage>

我的问题是,如何刷新此Bean中的数据,但不是每次刷新图表get,因为我可以停留在此页面上并刷新图表很多次,但更像是在打开时这页纸 ?

2 个答案:

答案 0 :(得分:0)

也许您可以尝试改用@ViewScoped

另一种选择是添加一种更新底层数据的方法,该方法可能由commandButton触发。

答案 1 :(得分:0)

metadata可以达到这个目的,每次打开页面时都会调用onload方法

<f:metadata>
    <f:viewAction action="#{bean.onload}" />
</f:metadata>

@ManagedBean
@ApplicationScoped
public class ImgBean{
    @EJB
    private EJUser ejuser;

    @PostConstuct
    private void init(){
        // init some lists and objects from DB
    }

    private void onload(){
        init();        
    }

    public StreamedContent getChart(){
        //build and return 
    }
}