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

How to refresh DB data in Application ScopedBean?

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

豆子

@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 图表,因为我可以停留在这个页面并刷新图表很多次,但更像是什么时候我打开页面?

或许您可以尝试使用 @ViewScoped

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

触发

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 
    }
}