-1

这篇文章中,我了解到包含 a 的页面StreamedContend必须与 a 相关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刷新图表,因为我可以在这个页面上多次刷新图表,但更像是打开页面时?

4

2 回答 2

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 
    }
}
于 2018-06-21T12:30:10.197 回答
0

也许您可以尝试@ViewScoped改用。

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

于 2018-06-21T09:06:50.837 回答