2010-12-20 17 views
3

私は、プライムフェイスのダイナミックイメージの作業に問題があります。私は、私がそれをプレミアムショーケースの例のように正確にやっていると思いますが、イメージはページにロードされません。私のマネージドBeanは次のように見えます。動的Jfreechart

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

のように見えますか?

+0

AnAmuser、コンソールにエラーはありませんか?あなたがイメージを作成しているかどうかを確認する必要があります。イメージのコピーをディスクに保存します。 –

+0

画像は{glassfish-home}/domains/domain1 /に保存されており、画像が含まれていることがわかります。しかし、私が理解しているように、それはページに設定したイメージを保存し、イメージファイルを削除する必要があります。たぶん、変数のユーザーが行を移動するデータテーブルでこれを使用するのは問題です。 – AnAmuser

答えて

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

、のようなものを試してみてください。

+0

試していただきありがとうございますが、これは私の問題を解決しません。画像はまだ表示されません。私はまた、何かを助けたかどうかを確認するためにいくつかの異なるスコープを試しましたが、これは役に立ちませんでした:( – AnAmuser

+0

面白いのは、画面上の他のフィールドの姓または名字を見ることができますか? –

+0

はい。 – AnAmuser

1

画像をサーバーに保存しないでください。次に、画像をサーバーに保存しないでください。 推奨ソリューションは、オンデマンドで生成されたイメージをサーブレットからクライアントにストリーミングし、サーブレットへのリンク(もちろんイメージを生成するパラメータ)は、事前生成された画像ファイル。