Hi,
Have you try to extend NonCachingImage instead of Image (and comments
setHeaders(...))?
/david
Jason Mihalick wrote:
I am integrating JFreeChart into my application and I've followed the
JFreeChart example on the wiki. That works very nicely. I was impressed.
What I want to do now is update the graph that I display based on the
selection from a drop down list. I've successfully added the DropDownChoice
component and added a AjaxFormComponentUpdatingBehavior to it. I've
verified that my onUpdate( AjaxRequestTarget ) method is being invoked and
I'm receiving the updated value, which is very cool. Here is my onUpdate
implementation for the DropDownChoice control:
protected void onUpdate( AjaxRequestTarget target ) {
log.debug( "graphStyles onUpdate invoked! SelectedGraphStyle = " +
FieldResultsPanel.this.getSelectedGraphStyle() );
FieldResultsPanel.this.updateGraph(); // Update the model and re-create
the JFreeChart Image
// fieldGraph is my JFreeChartImage instance (derived from Image)
// This is supposed to indicate back to the browser that the image needs
updated. I think this
// is working properly
target.addComponent( FieldResultsPanel.this.fieldGraph );
}
Even though I am updating the model of my JFreeChartImage, it appears that
the getImageData method is never invoked afterwards.
What do I need to do in order to get the image data to be re-read?
Here is my JFreeChartImage class:
public class JFreeChartImage extends Image {
private static final Logger log = LoggerFactory.getLogger(
JFreeChartImage.class );
private int width;
private int height;
public JFreeChartImage( String id ) {
super( id );
}
public JFreeChartImage( String id, int width, int height ) {
this( id );
this.width = width;
this.height = height;
}
public JFreeChartImage( String id, JFreeChart chart, int width, int height
) {
super(id, new Model( chart ) );
this.width = width;
this.height = height;
}
public Component setModel( JFreeChart chart ) {
log.debug( "setModel invoked with chart: " + chart );
return super.setModel( new Model( chart ) );
}
@Override
protected Resource getImageResource() {
return new DynamicImageResource(){
private static final long serialVersionUID = 1L;
@Override
protected byte[] getImageData() {
log.debug( "Invoking getImageData..." );
JFreeChart chart = (JFreeChart)getModelObject();
log.debug( "Chart object: " + chart );
return toImageData( chart.createBufferedImage( width, height ) );
}
@Override
protected void setHeaders( WebResponse response ) {
if ( isCacheable() ) {
super.setHeaders(response);
} else {
response.setHeader( "Pragma", "no-cache" );
response.setHeader( "Cache-Control", "no-cache" );
response.setDateHeader( "Expires", 0 );
}
}
};
}
Any help is much appreciated!
--
Jason
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]