使用三元运算符的Grails hasErrors方法?

时间:2011-10-31 15:08:47

标签: grails groovy ternary-operator gsp

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

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

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

以下是代码段:

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

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

作为GSP中的方法调用的hasErrors与标记<g:hasErrors>的工作方式略有不同。前者用于在div或span等中设置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}" />

这也适用于<g:if>

中的逻辑操作