我正在使用Grails框架开发应用程序,当从gsp视图调用方法时,我遇到了hasErrors问题。
我有一个表单,它由数据库中的值填充(默认值)。这些值存储在会话对象中。用户可以编辑表单字段中的值并将结果发送回数据库。在数据持久化之前,我有一个验证数据的命令对象。如果存在错误,则命令对象呈现具有相同形式的视图,并突出显示错误。
我要做的是让表单字段由存储在会话对象中的值填充,除非命令对象有错误。在这种情况下,字段应填入用户输入的错误值。
以下是代码段:
<g:textField name="somename" id="someid" value="${hasErrors(bean: commandobject, field: 'somename') ? fieldValue(bean: commandobject, field: 'somename') : session.somevalue}" />
上述代码的问题在于,无论字段中输入的值是对还是错,字段始终都以会话对象中的值结束。有没有解决方案,或者我首先做错了什么?
答案 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>