So I have discussed the issue with Kaptcha library author and found out that the problem is, in fact, with Tapestry implementation itself.
https://code.google.com/p/kaptcha/issues/detail?id=72 Tapestry component uses response.setHeader("Cache-Control") twice, and the second call obviously overrides the first one. Is it going to be fixed? On Tue, Jan 21, 2014 at 12:59 PM, Ilya Obshadko <ilya.obsha...@gmail.com>wrote: > I'm not sure if anyone else has that issue: reloading the zone containing > kaptcha component does not trigger image reloading, so the whole thing > becomes unusable (because internal CAPTCHA text is already different, but > image is not). This affects ONLY Firefox, all the other major browsers are > OK. Don't have an idea why (probably Firefox doesn't respect cache control > headers because of some reasons). > > After spending some time to fix it, I've ended up with simple > copy-and-paste versions of KaptchaField and KaptchaImage classes with only > one small difference in KaptchaImage: > > > boolean beginRender(MarkupWriter writer) > > { > > captchaText = producer.createText(); > > > > Link link = resources.createEventLink("image", > RandomStringUtils.randomAlphanumeric ( 8 ) ); > > > writer.element("img", > > > "src", link.toURI(), > > > "width", producer.getWidth(), > > > "height", producer.getHeight()); > > > resources.renderInformalParameters(writer); > > > writer.end(); > > > return false; > > } > > It might be a good idea to fix it in the main branch. > > -- > Ilya Obshadko > > -- Ilya Obshadko