code: protected FormComponent<Serializable> newCaptchaFormComponent(final String id,
  		final IModel<Serializable> model)
  	{
  		return new FormComponent<Serializable>(id, model)
  		{
  
  			/** The Constant serialVersionUID. */
  			private static final long serialVersionUID = 1L;
  
  			/**
  			 * {@inheritDoc}
  			 */
  			@Override
  			public void onComponentTagBody(final MarkupStream markupStream,
  				final ComponentTag openTag)
  			{
  				replaceComponentTagBody(markupStream, openTag,
  					newReCaptcha(getPublicKey(), getPrivateKey(), false)
  						.createRecaptchaHtml("errorText", "clean", null));
  			}
  
  			/**
  			 * {@inheritDoc}
  			 */
  			@Override
  			public void validate()
  			{
  				final ReCaptchaImpl reCaptcha = new ReCaptchaImpl();
  				reCaptcha.setPrivateKey(getPrivateKey());
  				final String challenge = PageParametersExtensions
  					.getParameter(PARAMETER_KEY_RECAPTCHA_CHALLENGE_FIELD);
  				String uresponse = PageParametersExtensions
  					.getParameter(PARAMETER_KEY_RECAPTCHA_RESPONSE_FIELD);
  				if (uresponse == null)
  				{
  					uresponse = "";
  				}
  				final String remoteAddress = WicketComponentExtensions.getHttpServletRequest()
  					.getRemoteAddr();
  				final ReCaptchaResponse reCaptchaResponse = reCaptcha.checkAnswer(remoteAddress,
  					challenge, uresponse);
  
  				if (!reCaptchaResponse.isValid())
  				{
  					error(ResourceModelFactory
  						.newResourceModel(ResourceBundleKey.builder().key("kaptcha.invalid.label")
  							.defaultValue("Incorrect answer, type the words from the image again!")
  							.build(), this)
  						.getObject());
  				}
  			}
  		};
  	}
docs: Factory method for creating a new {@link FormComponent} for the recaptcha. This method is
  invoked in the constructor from the derived classes and can be overridden so users can
  provide their own version of a {@link FormComponent}.
  
  @param id
  the id
  @param model
  the model
  @return the new {@link FormComponent} for the recaptcha.