Found a similar issue not long ago. There is a class that does just what you
mentioned, appends a timestamp as a request parameter of the <img> tag's
url. I think the class was NonCachingImage.

Cheers,
Xavier

2010/3/19 Doug Leeper <douglee...@yahoo.com>

> I am trying to create a barcode image from a user entered value.  The image
> is to be updated while the user types.  Hence I am using Ajax (onChange
> event) on the text field to regenerate the image.  However, the image is not
> getting refreshed.  It appears that the browser is not recognizing that the
> image has been updated.  Is there a way to append a "timestamp" on the image
> url just for this image?
>
> or should I use a different type of resource?
>
> Note: the value entered has not be persisted so I don't believe I can a
> ResourceReference.  Please correct me if I am wrong.
>
>
> Thanks
> - Doug
>
>
>
> BTW...Here is my code that I am using to generate the bar code:
>
> barCodeValueContainer = new WebMarkupContainer("barCodeValueContainer") {
>            @Override
>            public void onBeforeRender() {
>                if (coupon.getObject().getBarCodeType() == null) {
>                    codeContainer.replace(new
> WebMarkupContainer("barCode"));
>                } else if (barCodeErrorMessage == null) {
>                    codeContainer.replace(new BarCodeFragment("barCode",
> this));
>                } else {
>                    codeContainer.replace(new ErrorFragment("barCode", this,
>                            barCodeErrorMessage));
>                }
>                super.onBeforeRender();
>            }
>
>            public boolean isVisible() {
>                return coupon.getObject().getBarCodeType() != null;
>            }
>        };
>
> private class BarCodeFragment extends Fragment {
>        public BarCodeFragment(String id, MarkupContainer markupProvider) {
>            super(id, "barCodeFragment", markupProvider);
>            setRenderBodyOnly(true);
>
>            // Create the barcode bean
>
>            String barCodeType = coupon.getObject().getBarCodeType();
>            String barCodeValue = coupon.getObject().getBarCodeValue();
>
>            AbstractBarcodeBean bean = null;
>
>            if (barCodeType.equals(BarCodeType.CODE_39.id())) {
>                bean = new Code39Bean();
>                // bar width exactly one pixel
>                ((Code39Bean) bean).setWideFactor(3);
>            } else if (barCodeType.equals(BarCodeType.CODE_128.id())) {
>                bean = new Code128Bean();
>            } else if (barCodeType.equals(BarCodeType.UPC_A.id())) {
>                bean = new UPCABean();
>            }
>
>            if (bean == null || barCodeValue == null) {
>                add(new ErrorFragment("barCode", CouponDetailEditPanel.this,
>                        "Bar code value not set"));
>            } else {
>                final int dpi = 150;
>
>                // Configure the barcode generator
>                bean.setModuleWidth(UnitConv.in2mm(1.0f / dpi)); // makes
> the
>                // narrow
>
>                bean.doQuietZone(false);
>
>                // Open output file
>                ByteArrayOutputStream out = new ByteArrayOutputStream();
>
>                try {
>                    // Set up the canvas provider for monochrome PNG output
>                    BitmapCanvasProvider canvas = new
> BitmapCanvasProvider(out,
>                            "image/png", dpi,
> BufferedImage.TYPE_BYTE_BINARY,
>                            false, 0);
>
>                    // Generate the barcode
>                    bean.generateBarcode(canvas, barCodeValue);
>
>                    System.out.println("VALUE: " + barCodeValue);
>
>                    // Signal end of generation
>                    canvas.finish();
>                    out.close();
>                    final byte[] content = out.toByteArray();
>                    Image img = new Image("barCode", new
> BarCodeImageResource(
>                            content));
>                    add(img);
>                } catch (Exception e) {
>                    add(new ErrorFragment("barCode",
>                            CouponDetailEditPanel.this, e.getMessage()));
>                }
>            }
>
>        }
>    }
>
>
> private class BarCodeImageResource extends DynamicImageResource {
>        private byte[] content;
>
>        public BarCodeImageResource(byte[] content) {
>            super("image/png");
>            this.content = content;
>            this.setLastModifiedTime(Time.now());
>        }
>
>        @Override
>        protected byte[] getImageData() {
>            return content;
>        }
>
>    }
>

Reply via email to