Hi Sjoerd,

Thanks for the response.

I;m using the wicket-extensions CaptchaImageResource, I can't override this, and assume it would set the cache headers itself. My guess is the the resource reference inthe generated html doesn't change and that the page does not feel a need to reload it,
(I could be barking up completely the wrong tree mind ;)

Cheers

Rory

Sjoerd Schunselaar wrote:
I had the same problem with generating statistics.

If your're extending the wicket Image class, you should override
getImageResource.
Simply add this method in getImageResource:

   @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);
                }
            }

And you're done.


Good luck.


On Fri, Oct 2, 2009 at 12:51 PM, RG <[email protected]> wrote:
Hi,

I'm trying to create a form with captcha for a demo I was building, but am
having problems with the update when the password is incorrect.  What I
wanted to achieve was the captcha being
regenerated with a new word on each try.  On submit I can see the captcha
being regenerated, but it does not update (the feedback form is.),  if I do
a 'view image' in
firefox I see the updated image.

I think this is because the image is being cached by firefox, but am not
certain.

I'm probably missing something stupid, but for the life of me can't work it
out.  Any help greatly appreciated.

Thanks

Rory

---------------------------------------------------------------

package org.sourceforge.jemm.jemmblog.pages.blog;

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.form.AjaxButton;
import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.RequiredTextField;
import org.apache.wicket.markup.html.form.TextArea;
import org.apache.wicket.markup.html.image.Image;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.util.value.ValueMap;
import org.sourceforge.jemm.jemmblog.domain.Blog;
import org.sourceforge.jemm.jemmblog.domain.DuplicateUserException;
import org.sourceforge.jemm.jemmblog.domain.dto.BlogDTO;
import org.sourceforge.jemm.jemmblog.pages.BasePage;
import org.sourceforge.jemm.jemmblog.util.CaptchaHelper;

/**
* Form for creating blog with captcha.
*
* n.b. captchaHelper.refreshCaptcha() creates a new CaptchaImageResource
with a different
* password on each invocation.
*/
public class CreateBlogPage extends BasePage {

  private final FeedbackPanel feedbackPanel;
  private final ValueMap properties = new ValueMap();

  private final CaptchaHelper captchaHelper = new CaptchaHelper();
  private final Image captchaImage;
    public CreateBlogPage() {
      ;
      Form<BlogDTO> form = new Form<BlogDTO>("form");
      form.setModel(new CompoundPropertyModel<BlogDTO>(new BlogDTO()));

      form.add(new TextArea<String>("blogName").setRequired(true));
      form.add(new TextArea<String>("username").setRequired(true));
      form.add(new TextArea<String>("password").setRequired(true));


//*****************************************************************************************
      // create teh captcha components             captchaImage = new
Image("captchaImage",  captchaHelper.refreshCaptcha());
            captchaImage.setOutputMarkupId(true);
      form.add(captchaImage);
            form.add(new RequiredTextField<String>("captchaField", new
PropertyModel<String>(properties, "captchaField")) {
          private static final long serialVersionUID = 1L;

          @Override
          protected void onComponentTag(final ComponentTag tag) {
              super.onComponentTag(tag);
              //
**************************************************************************************
              //  this does not work either...

              // clear the field after each render
              tag.put("value", "");
          }
      });



      add(form);

      AjaxButton ajaxBtn = new AjaxButton("ajaxButton") {
          private static final long serialVersionUID = 1L;

          @Override
          protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
              super.onSubmit();
              if (!captchaHelper.captchaMatches(getPassword())) {
                  error("Captcha value incorrect.");
            } else {
                  BlogDTO blogDTO = (BlogDTO) form.getModelObject();
                  try {
                      Blog blog = getManager().createBlog(blogDTO);
                      setResponsePage(new BlogOverviewPage(blog));
                  }catch(DuplicateUserException due) {
                      error("Blog user " + blogDTO.getUsername() + " already
exists");
                  }
              }


//***************************************************************************************
              //  update the captcha image, add it to the ajax response
              captchaImage.setImageResource(captchaHelper.refreshCaptcha());
              target.addComponent(captchaImage,"captchaImage");
          }

          @Override
          protected void onError(AjaxRequestTarget target, Form<?> form) {
              target.addComponent(feedbackPanel);
          }
      };
      form.add(ajaxBtn);
            feedbackPanel = new FeedbackPanel("feedback");
      // need to set output markupid to true
      feedbackPanel.setOutputMarkupId(true);
      add(feedbackPanel);
  }

  private String getPassword() {
      return properties.getString("captchaField");
  }

  /** Utility method used for testing */
  public String getCaptchaChallenge() {
      return captchaHelper.getCPassword();
  }
}
---------------------------------------------------------------------------------------------------------------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
      <title>Create Blog</title>

  </head>

  <body>
      <wicket:extend>
          <div wicket:id="feedback">
          </div>

          <form wicket:id="form">
              <p>
                  Blog Name:
                  <br />
                  <input type="text" wicket:id="blogName" />
              </p>
              <p>
                  Username:
                  <br />
                  <input type="text" wicket:id="username" />
              </p>
              <p>
                  Password:
                  <br />
                  <input type="text" wicket:id="password" />
              </p>
               <p><img wicket:id="captchaImage" /></p>
              <p> Please replicate the text you see above
              <br/>
              <input wicket:id="captchaField" id="captchaField" type="text"
size="40" />
              <p>
                  <input type="submit" wicket:id="ajaxButton" value="Create
blog" />
              </p>
                        </form>
      </wicket:extend>
  </body>
</html>


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



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


Reply via email to