如何使用 reCaptcha 防止数据输入在 Grails 中被擦除

How to prevent data input for being erase in Grails with reCaptcha

我的 gsp 有两个文本字段,用于名字-姓氏和 reCaptcha。我想要的是对于每个错误的验证码,用户输入的名字和姓氏都不会被删除。

控制器代码段:

       ***captcha_code****
       if (result) {
        def person = new Person(params)
        person.save()
        render "Success!"
    } else {
        flash.message = message(code: 'forgotPassword.captcha.wrong')
        redirect(controller:'person', action:'form')
    }

form.gsp

的狙击手
***captcha_code_here***
<g:form controller="person" action="save">
<label>First Name: </label>
<g:textField name="firstName"/><br/>
<label>Last Name: </label>
<g:textField name="lastName"/><br/>
<g:if test="${flash.message}">
    <div class="message" role="status" style="font-size: medium;color: green;">${flash.message}</div>
</g:if>
***captcha_code_here***
<g:actionSubmit value="Save"/>

在 Controller Action 中,发回您想要重新填充的字段。

要重新填充字段,您可以使用与消息相同的 flash 范围。出错时,将名字和姓氏添加到 flash 范围,然后在您的 GSP 中使用可用的这些值:

个人控制器

class PersonController {
    def save() {
        ...

        if(/* recaptcha failed */) {
            flash.firstName = params.firstName
            flash.lastName = params.lastName
        }

        ...
    }
}

普惠制

<label>First Name: </label>
<g:textField name="firstName" value="${flash.firstName ?: ''}"/><br/>
<label>Last Name: </label>
<g:textField name="lastName" value="${flash.lastName ?: ''}"/><br/>