Note that there are some explanatory texts on larger screens.

plurals
  1. POGrails/Gorn flush messages
    primarykey
    data
    text
    <p>My save method in controller:</p> <pre><code>def save = { def userInstance = new User(params) boolean captcha = jcaptchaService.validateResponse("image", session.id, params.response) if ( (captcha) &amp;&amp; (userInstance.save(flush: true))) { flash.message = "${message(code: 'default.created.message', args: [message(code: 'user.label', default: 'User'), userInstance.id])}" redirect(url:'http://localhost:8080/TrafficManFinal/index.gsp?page=registThx') } else { if (captcha == false) flash.message2 = "Wrong Captcha!" render(view: "create", model: [userInstance: userInstance]) } } </code></pre> <p>My User/create.gsp view</p> <pre><code> &lt;tr class="prop"&gt; &lt;td valign="top" class="name"&gt; &lt;label for="secretAnswer"&gt;&lt;g:message code="user.secretAnswer.label" default="Secret Answer" /&gt;&lt;/label&gt; &lt;/td&gt; &lt;td valign="top" class="value ${hasErrors(bean: userInstance, field: 'secretAnswer', 'errors')}"&gt; &lt;g:textField name="secretAnswer" value="${userInstance?.secretAnswer}" /&gt; &lt;g:form name="challenge" action="image"&gt; &lt;jcaptcha:jpeg name="image" /&gt;&lt;br&gt; &lt;br&gt; &lt;g:textField name="response" value="" /&gt;&lt;br&gt; &lt;br&gt; &lt;/g:form&gt; &lt;/td&gt; &lt;/tr &gt; </code></pre> <p>The Service:</p> <pre><code>import com.octo.captcha.service.CaptchaService; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGImageEncoder; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import javax.sound.sampled.AudioFileFormat; import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioSystem; /** * Provides access to the captchas as well as provides some util * type methods to convert captchas to usable data. * * @author LD &lt;ld@ldaley.com&gt; */ class JcaptchaService { /** * Used to access the captchas defined as part of the app config. */ def grailsApplication /** * Retrieves a captcha by name. * * @param captchaName The 'key' of the captcha defined in config. * @throws IllegalArgumentException If captchaName is null. * @throws IllegalStateException If there is no captcha by that name. * @returns The captcha service keyed by 'captchaName' */ CaptchaService getCaptchaService(String captchaName) { if (captchaName == null) throw IllegalArgumentException("'captchaName' cannot be null") def c = grailsApplication.config.jcaptchas[captchaName] if (c == null) throw new IllegalStateException("There is no jcaptcha defined with name '${captchaName}'") c } /** * Used to verify the response to a challenge. * * @param captchaName The key of the captcha * @param id The identifier used when retrieving the challenge (often session.id) * @param response What the user 'entered' to meet the challenge * @return True if the response meets the challenge * @see getCaptchaService() */ boolean validateResponse(captchaName, id, response) { def c = getCaptchaService(captchaName) c.validateResponseForID(id, response) } /** * Utility routine to turn an image challenge into a JPEG stream. * * @param challenge The image data * @return A raw bunch of bytes which come together to be a JPEG. */ byte[] challengeAsJpeg(BufferedImage challenge) { def jpegOutputStream = new ByteArrayOutputStream() def jpegEncoder = JPEGCodec.createJPEGEncoder(jpegOutputStream) jpegEncoder.encode(challenge) jpegOutputStream.toByteArray() } /** * Utility routine to turn a sound challenge into a WAV stream. * * @param challenge The sound data * @return A raw bunch of bytes which come together to be a WAV. */ byte[] challengeAsWav(AudioInputStream challenge) { ByteArrayOutputStream soundOutputStream = new ByteArrayOutputStream() AudioSystem.write(challenge, AudioFileFormat.Type.WAVE, soundOutputStream) soundOutputStream.flush() soundOutputStream.close() soundOutputStream.toByteArray() } } </code></pre> <p>The way it is implemented, only if i introduce the right captch once, i can see the flush.messages comming from the constraints. i want a way to merge the two flush messages or display the two deferent flushes at same time.</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload