3

プライムフェイスの動的画像を機能させるのに問題があります。プライムフェイスのショーケースの例とまったく同じようにやっていると思いますが、画像がページにロードされていません。私のマネージド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>

私が間違っていることがわかりますか?

4

2 に答える 2

1

画像をサーバーに保存せず、何らかの方法でリンクするのが最善です。推奨されるソリューションは、イメージをオンデマンドで生成し、サーブレットからクライアントにストリーミングし、事前に生成されたイメージへのリンクの代わりに、サーブレットへのリンク (もちろんイメージを生成するためのパラメーターを含む) を JSF に注入することです。ファイル。

于 2011-01-13T09:21:08.897 に答える
0

チャート画像をディスクに書き込むことが問題を引き起こしていると思います。代わりに出力ストリームを使用してください。次のようなものを試してください、

    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());
    }

それはおそらくあなたの問題を解決します。

于 2010-12-25T08:29:13.653 に答える