【问题标题】:How to refresh DB data in Application ScopedBean?如何在 Application ScopedBean 中刷新数据库数据?
【发布时间】:2018-11-30 12:27:13
【问题描述】:

this post 我了解到包含StreamedContend 的页面必须与ApplicationScoped bean 相关联,但其结果是,如果我在其他页面中修改某些数据(保存在数据库中),则使用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图表,因为我可以在这个页面上多次刷新图表,但更像是当我打开页面时?

【问题讨论】:

    标签: java refresh javabeans application-scope


    【解决方案1】:

    也许您可以尝试改用@ViewScoped

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

    【讨论】:

    • 正如我链接到的帖子所述,ViewScoped 不能在这里使用,如果是我就不会问了
    • 然后是第二种方法,添加一个触发重新加载的按钮。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2021-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多