动态Jfreechart

我有一个问题,让primefaces动态图像工作。我认为我正在完成与primefaces展示中的示例完全相同但图像未加载到页面上。我的托管bean看起来如下。
@ManagedBean(name = "statisticsBean")
@NoneScoped
public class StatisticsBean {

    private WMCUser user;
    private BasicGroup group;
    private List<GameProgressStatistics> lineChartStats;
    private List<UserStatistics> userStatistics;
    private static final Logger logger = Logger.getLogger(StatisticsBean.class.getName());

public StatisticsBean() {
        ...
        createUserStatistics();
}

private void createUserStatistics() {
    List<WMCUser> users = GroupHelper.getNonDeletedMembers(group);
    for (WMCUser wmcUser : users) {
        userStatistics.add(new UserStatistics(
                wmcUser.getStatUser().getMakeCount(),
                wmcUser.getStatUser().getGamesPlayed(),
                wmcUser.getFirstName(),
                wmcUser.getLastName()));
    }
}

      public class UserStatistics {

        private int makeCount;
        private int gameCount;
        private String firstName;
        private String lastName;
        private StreamedContent thermoChart;

        public UserStatistics(int makeCount, int gameCount, String firstName, String lastName) {
            this.makeCount = makeCount;
            this.gameCount = gameCount;
            this.firstName = firstName;
            this.lastName = lastName;
            try {
                ThermometerPlot plot = new ThermometerPlot(createThermometerDataset());
                File chartFile = new File("dynamichart");
                JFreeChart chart = new JFreeChart(plot);
                ChartUtilities.saveChartAsPNG(chartFile, chart, 50, 50);
                thermoChart = new DefaultStreamedContent(new FileInputStream(chartFile), "image/png");
            } catch (Exception e) {
                logger.severe(e.getMessage());
            }
            .....
        }
        .....
    }
JSF页面看起来像这样
<h:form id="stats">
                    <p:dataTable  id="statsTable" var="user" value="#{statisticsBean.userStatistics}">
                        <p:column styleClass="textColumn">
                            <f:facet name="header">
                                <h:outputText value="Name" />
                            </f:facet>
                            <h:outputText value="#{user.firstName} #{user.lastName}"/>
                        </p:column>
                        ...
                        <p:column styleClass="imageColumn">
                            <f:facet name="header">
                                <h:outputText value="Luck Barometer"/>
                            </f:facet>
                            <p:graphicImage value="#{user.thermoChart}"/>
                        </p:column>
                    </p:dataTable>
   </h:form>
你能看出我做错了什么吗?     
已邀请:
最好不要将图像保存到服务器,然后以某种方式链接到它。 首选解决方案是按需生成图像并从servlet流式传输到客户端,并在JSF中注入指向servlet的链接(带有生成图像的参数),而不是指向预生成图像的链接文件。     
我认为,将图表图像写入磁盘会导致问题。请改用输出流。 试试像,
    try {
        ThermometerPlot plot = new ThermometerPlot(createThermometerDataset());

    ByteArrayOutputStream baos = new ByteArrayOutputStream();

        JFreeChart chart = new JFreeChart(plot);
        ChartUtilities.writeChartAsPNG(baos, chart, 50, 50);
        thermoChart = new DefaultStreamedContent( new ByteArrayInputStream(baos.toByteArray()), "image/png");
    } catch (Exception e) {
        logger.severe(e.getMessage());
    }
它可能会解决你的问题。     

要回复问题请先登录注册