Hi I am able to reload the captcha image in the following way(Using JCaptcha)

package com.sybase365.mobiliser.web.consumer.pages.signup;
1>Write a class for dynamic image as follows.

public abstract class CaptchaImage extends NonCachingImage {
    public CaptchaImage(String id, final String challengeId) {
        super(id);
        setImageResource(new DynamicImageResource() {
            protected byte[] getImageData() {
                ByteArrayOutputStream os = new ByteArrayOutputStream();
                String challengeId = String.valueOf(System.currentTimeMillis());
                BufferedImage challenge = getImageCaptchaService()
                        .getImageChallengeForID(challengeId,
                                Session.get().getLocale());
                JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(os);
                try {
                    encoder.encode(challenge);
                    return os.toByteArray();
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            }           });    }
    protected abstract ImageCaptchaService getImageCaptchaService();
}

2> add it to form and provide a link to refresh it

img = generateCaptcha();// see this code in 3rd step
        form.add(img);

        form.add(new AjaxLink("captchLink") {
            @Override
            public void onClick(AjaxRequestTarget target) {
                // counter++;

                // target.addComponent(generateCaptcha());
                target.addComponent(form.replace(generateCaptcha()));

            }
        });

3>public NonCachingImage generateCaptcha() {
        String challengeId = String.valueOf(System.currentTimeMillis());
        img = new CaptchaImage("captchaImage", challengeId) {
            @Override
            protected ImageCaptchaService getImageCaptchaService() {
                return captchaService;
            }
        };
        img.setOutputMarkupId(true);
        return img;

    }
4> html
<p> </p>
                                 # click me 


5> Don't forget to add the following in application-context.xml if u r using
spring injection

<bean
class="com.octo.captcha.service.image.DefaultManageableImageCaptchaService"
id="imageCaptchaService"/>

For any queries mail me [email protected]

Thanks
Praveen Homkar




--
View this message in context: 
http://apache-wicket.1842946.n4.nabble.com/How-to-Ajax-refresh-captcha-image-a-image-backed-by-DynamicImageResource-tp1858686p3744243.html
Sent from the Users forum mailing list archive at Nabble.com.

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to