-
FEATURED COMPONENTS
First time here? Check out the FAQ!
Hi all,
does anyone have integrate a non zk captcha component while working with ce edition and can post the codes for this.
thanks
Stephan
Hi Stephan,
I'm using a non-ZK-Captcha based on SimpleCaptcha for my JeaseCMS. You can see it in use here:
http://www.jease.org/blog/quotation_marks/
Although it is not integrated as "native" ZK component, the usage within ZK is very straighforward. Building a server side wrapper for this should be a job of less than an hour:
<zk> <vlayout id="input" width="100%"> <image src="/site/service/Captcha.jsp?id=myCaptcha" /> Please enter the code: <textbox id="code" hflex="1" /> <button label="Submit"> <attribute name="onClick"><![CDATA[ if (code.getValue().equals( Sessions.getCurrent().getNativeSession().getAttribute("myCaptcha"))) { alert("Code is correct"); } else { alert("Code is wrong"); } ]]></attribute> </button> </vlayout> </zk>
All you need is this JSP... you can transform it easily into a servlet as well:
http://code.google.com/p/jease/source/browse/trunk/Jease/site/service/Captcha.jsp
And the corresponding jar-file:
http://jease.googlecode.com/svn/trunk/Jease/WEB-INF/lib/simplecaptcha.jar
Cheers, Maik
Thank you Maik. I will study this.
Many thanks
Stephan
PS: I'm wondering why such an global used comp is not in the ce version ?????
Here's also an captcha component that base on google reCaptcha service.
https://github.com/tony1223/zk-recaptcha
Maik. What version you use?
I have problems with GradiatedBackgroundProducer( Color.WHITE, Color.LIGHT_GRAY ) .
In my loaded version (v. 1.1.1) it accepts no arguments.
I need a version which is available from a maven repo.
best
Stephan
I'm using 1.1.1 which is available via SourceForge:
http://sourceforge.net/projects/simplecaptcha/files/
I just compared this jar-file with the one available via Maven (and declared as 1.1.1). There are differences between this two jars, as for example the GradiatedBackgroundProducer does take no arguments for the Maven version. If you still want to go with Maven, just leave out the parameters and use the default constructor.
Cheers, Maik
Great Maik,
thanks TonyQ too,
here is the pic from the 'forgotten password' dialog.
I will try to integrate the codes for all in the Zksample2 too.
thanks
Stephan
CaptchaUtils.java:
import nl.captcha.Captcha; import nl.captcha.backgrounds.GradiatedBackgroundProducer; import nl.captcha.text.renderer.ColoredEdgesWordRenderer; /** * EN: Utility class for creating a CAPTCHA.<br> * Captcha can be direct loaded into a org.zkoss.zul.Image<br> * DE: Hilfsklasse zur Erzeugung eines CAPTCHA.<br> * Captcha kann direkt in ein org.zkoss.zul.Image eingelesen werden. * * <pre> * Image img = new org.zkoss.zul.Image(); * img.setContent(CaptchaUtils.getCaptcha().getImage()); * * String verifyStr = captcha.getAnswer(); * </pre> * * @author Stephan Gerth */ public class FDCaptchaUtils { public FDCaptchaUtils() { } /** * Create a 5 digits captcha. * * @return */ public static Captcha getCaptcha() { Captcha captcha = new Captcha.Builder(140, 50) .addText(new ColoredEdgesWordRenderer()).addNoise() .addBackground(new GradiatedBackgroundProducer()) .addBorder() .build(); return captcha; } }
Pieces of the zul view:
. . . <grid sclass="GridPlain" style="padding-right: 15px;"> <columns> <column align="right" width="180px" /> <column /> </columns> <rows> <!-- Captcha / Captcha --> <row> <label value="${c:l('common.Captcha')}" /> <hbox> ====>>> <image id="img_Captcha" /> <toolbarbutton id="btnReCaptcha" image="/images/icons/refresh_green_16x16.gif" tooltiptext="${c:l('common.ReCaptcha')}" /> </hbox> </row> <!-- Verify Captcha / Verifiziere Captcha --> <row> <label value="${c:l('common.Repeat')}" /> <hbox> <textbox id="txtb_VerifyCaptcha" maxlength="6" width="140px" /> <toolbarbutton id="btnVerifyCaptcha" image="/images/icons/start_16x16.gif" tooltiptext="${c:l('common.Check.Input')}" /> </hbox> </row> </rows> </grid> . . .
Pieces of the Controller:
public class ForgottenPasswordCtrl extends GenericForwardComposer implements Serializable { . . . protected Window windowForgottenPassword; // autowired protected Image img_Captcha; // autowired protected Textbox txtb_EmailAddress; // autowired protected Textbox txtb_VerifyCaptcha; // autowired protected Button btnSendPassword; // autowired private Captcha captcha; . . . public void onCreate$windowForgottenPassword(Event event) throws Exception { // Create the captcha and set it as image doReCaptcha(event); windowForgottenPassword.doModal(); } public void onClick$btnClose(Event event) throws InterruptedException {... public void onClick$btnSendPassword(Event event) {... public void onClick$btnReCaptcha(Event event) {... public void onClick$btnVerifyCaptcha(Event event) {... . . . /** * Do a re-Captcha.<br> * * @param event */ private void doReCaptcha(Event event) { // init: disable the send password button btnSendPassword.setDisabled(true); setCaptcha(FDCaptchaUtils.getCaptcha()); img_Captcha.setContent(getCaptcha().getImage()); } /** * 1. Checks if the email address is entered.<br> * 2. Verify the created captcha digits against the users input from a textbox.<br> * 3. Enable/disable the 'reset password' button.<br> * * @param event */ private void doVerifyCaptcha(Event event) { // init: disable the send password button btnSendPassword.setDisabled(true); // check if the email address is entered if (StringUtils.isEmpty(txtb_EmailAddress.getValue())) { throw new WrongValueException(txtb_EmailAddress, Labels.getLabel("message.Error.CannotBeEmpty")); } // check if the captcha is verified correctly if (StringUtils.equals(txtb_VerifyCaptcha.getValue(), getCaptcha().getAnswer())) { btnSendPassword.setDisabled(false); } } . . . // +++++++++++++++++++++++++++++++++++++++++++++++++ // // ++++++++++++++++ Setter/Getter ++++++++++++++++++ // // +++++++++++++++++++++++++++++++++++++++++++++++++ // public void setCaptcha(Captcha captcha) { this.captcha = captcha; } public Captcha getCaptcha() { return captcha; } . . .
Asked: 2011-07-01 09:06:58 +0800
Seen: 1,091 times
Last updated: Mar 12 '12