【问题标题】:Grails hasErrors method with ternary operator?带有三元运算符的Grails hasErrors方法?
【发布时间】:2011-10-31 15:08:46
【问题描述】:

我正在使用 Grails 框架开发应用程序,当从 gsp 视图作为方法调用时,我遇到了 hasErrors 问题。

我有一个由数据库中的值(默认值)填充的表单。这些值存储在会话对象中。用户可以编辑表单字段中的值并将结果发送回数据库。在数据被持久化之前,我有一个验证数据的命令对象。如果有错误,命令对象会以相同的形式呈现视图并突出显示错误。

我要做的是让表单字段由存储在会话对象中的值填充,除非命令对象出现错误。在这种情况下,字段应该由用户输入的错误值填充。

这里是sn-p的代码:

<g:textField name="somename" id="someid" value="${hasErrors(bean: commandobject, field: 'somename') ? fieldValue(bean: commandobject, field: 'somename') : session.somevalue}" />

上面代码的问题是,无论在字段中输入的值是对还是错,字段总是以会话对象中的值结束。是否有解决方案,或者我首先做错了什么?

【问题讨论】:

    标签: grails groovy ternary-operator gsp


    【解决方案1】:

    当您像这样调用hasErrors 时,您正在调用不返回布尔值的&lt;g:hasErrors/&gt; 标记 - 它会查看条件并有条件地调用标记主体。根据该描述,它的行为方式是有道理的。

    我建议创建自己的TagLib 并在您的条件下使用commandobject.errors.hasFieldErrors('somename') [docs](以获得您正在寻找的布尔值)。

    【讨论】:

      【解决方案2】:

      hasErrors 作为 GSP 中的方法调用与作为标记 &lt;g:hasErrors&gt; 的工作方式略有不同。前者旨在在 div 或 spans 等中设置 CSS 类...

      e.g. <div class="prop ${hasErrors(bean:parent, field:'child.name', 'errors')}">
      

      errors 是 CSS 类名。因此,如果您不指定输出字符串,它似乎默认返回 false,因此要解决您的情况,请返回“1”。所以你的代码应该是这样的:

      <g:textField name="somename" id="someid" value="${hasErrors(bean: commandobject, field: 'somename', '1') ? fieldValue(bean: commandobject, field: 'somename') : session.somevalue}" />
      

      这也适用于&lt;g:if&gt;中的逻辑操作

      【讨论】:

        猜你喜欢
        • 2023-02-03
        • 1970-01-01
        • 2016-07-05
        • 1970-01-01
        • 2016-02-12
        • 2015-01-22
        • 1970-01-01
        • 1970-01-01
        • 2021-08-01
        相关资源
        最近更新 更多