首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态Jfreechart

动态Jfreechart
EN

Stack Overflow用户
提问于 2010-12-20 21:13:37
回答 2查看 1.9K关注 0票数 3

我有一个问题,使primefaces动态图像工作。我想我所做的与primefaces showcase上的示例完全一样,但是图像并没有加载到页面上。我的托管bean如下所示。

代码语言:javascript
复制
@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页面如下所示

代码语言:javascript
复制
<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>

你能看到我做错了什么吗?

EN

回答 2

Stack Overflow用户

发布于 2011-01-13 17:21:09

最好不要将图像保存到服务器,然后以某种方式链接到它。首选的解决方案是按需生成图像,并将其从servlet流式传输到客户机,并在JSF中注入指向servlet的链接(当然,带有用于生成图像的参数),而不是指向预先生成的图像文件的链接。

票数 1
EN

Stack Overflow用户

发布于 2010-12-25 16:29:14

我认为,将图表图像写入磁盘是导致问题的原因。请改用输出流。试试这样的东西,

代码语言:javascript
复制
    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());
    }

它可能会解决你的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4489950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档