我有一个问题,使primefaces动态图像工作。我想我所做的与primefaces showcase上的示例完全一样,但是图像并没有加载到页面上。我的托管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>你能看到我做错了什么吗?
发布于 2011-01-13 17:21:09
最好不要将图像保存到服务器,然后以某种方式链接到它。首选的解决方案是按需生成图像,并将其从servlet流式传输到客户机,并在JSF中注入指向servlet的链接(当然,带有用于生成图像的参数),而不是指向预先生成的图像文件的链接。
发布于 2010-12-25 16:29:14
我认为,将图表图像写入磁盘是导致问题的原因。请改用输出流。试试这样的东西,
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());
}它可能会解决你的问题。
https://stackoverflow.com/questions/4489950
复制相似问题