Grails有带有三元运算符的errors方法



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

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

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

下面是代码片段:

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

上面代码的问题是,无论字段中输入的值是对还是错,字段总是以来自会话对象的值结束。有解决办法吗,还是我一开始就做错了什么?

当您调用hasErrors时,您正在调用不返回布尔值的<g:hasErrors/>标记-它会查看条件并有条件地调用标记体。在这种描述下,它的行为方式是有道理的。

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

作为GSP中的方法调用的hasErrors与作为标记<g:hasErrors>的工作方式略有不同。前者的目的是设置CSS类div或跨度等…

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}" />

这也适用于<g:if>

中的逻辑操作。

相关内容

  • 没有找到相关文章

最新更新