【问题标题】:Grails Custom Validation Messages not working?Grails 自定义验证消息不起作用?
【发布时间】:2012-11-08 11:38:04
【问题描述】:

我目前正在开发 Grails 应用程序,我想更改为我的域模型中的对象显示的默认错误消息。我相信我所做的一切都是正确的,但也许有人可以帮我解决这个问题,代码如下:

领域模型:

class Details {

    long mobileNo
    String name
    static constraints = {
    mobileNo(blank:false, maxsize:12, matches:"44[0-9]{10}")
    }
}

messages.properties

sms.mobileNo.matches.invalid=You must enter a correct mobile number in {0}

查看

<g:hasErrors bean="${detailsInstance}">
    <div class="alert error">
        <g:renderErrors bean="${detailsInstance}" as="list" />
    </div>
</g:hasErrors>

现在,当点击页面上的创建时,它会转到以下控制器功能:

def details = new Details(params)

        if (details.validate()) {

}
else{
            render view: 'create', model: [detailsInstance: details]

        }

现在我希望应用程序能够像这样工作:一个错误的数据被传递给控制器​​,它认为它是无效的,然后将有错误的模型传递回同一个视图。然后从 messages.properties 文件中提取数据不正确的错误消息。但是我希望在哪里看到这个:

You must enter a correct mobile number in [mobileNo]

我反而看到了这个:

Failed to convert property value of type java.lang.String to required type long for property mobileNo; nested exception is java.lang.IllegalArgumentException: Could not parse number: Unparseable number: "gg"

有人可以帮我生成用于验证的自定义消息,以便向用户显示有用的消息吗?谢谢

【问题讨论】:

    标签: validation grails messages


    【解决方案1】:

    问题是,在验证之前,绑定会尝试将您的值 'gg' 绑定到 long。

    你的约束也说:

    mobileNo(blank:false, maxsize:12, matches:"44[0-9]{10}"
    

    因此您希望它是一个字符串,但它被定义为一个 long。

    尝试将您的 mobileNo 更改为 String 类型。

    【讨论】:

    • 非常感谢,帮了大忙,我现在已经整理好了:-D
    【解决方案2】:

    更深入地查看您的堆栈跟踪,它可能会告诉您抛出错误的行号。我的猜测是它在下一行抛出异常......

    new Details(params)
    

    这是因为在 grails 尝试将 'gg' 转换为 long 之前,您没有检查输入,这将不起作用。在我看来,你有四个选择......

    1. 将 mobileNo 更改为字符串
    2. 在执行new Details(params) 之前验证params(不推荐)
    3. 使用 javascript/jquery 只允许输入中的数值。
    4. 我记得那里有一些额外的插件可以添加到 grails 以进行远程验证或类似的东西,但我不记得它们了。但是,我只会使用 jquery(或其他)构建自己的。

    享受吧!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-15
      • 2016-11-20
      • 2021-02-02
      • 1970-01-01
      • 1970-01-01
      • 2017-02-03
      相关资源
      最近更新 更多