如何解决Grails数据绑定问题
| 这里缺少什么,因为当验证失败时,呈现的页面不会显示先前引入的值,因此用户无法对其进行更正。请使用缺少的代码更新我的代码!一切正常,除了在验证失败后返回时,以前引入的值已消失。 add.gsp <div id=\"stylized\" class=\"myform\">
<g:form controller=\"conference\" action=\"save\">
<h1>Add New Conference Record</h1>
<p>Basic information</p>
<label>Name
<span class=\"small\">Add your name</span>
</label>
<input type=\"text\" name=\"name\" /><br>
...
...
<p>Dates</p>
<label>Start Date
<span class=\"small\">First Day</span>
</label>
<g:datePicker name=\"startDate\" precision=\"day\" value=\"${new Date()}\"/><br><br>
<label>End Date
<span class=\"small\">First Day</span>
</label>
<g:datePicker name=\"endDate\" precision=\"day\" value=\"${new Date()}\"/><br><br>
...
...
<g:submitButton name=\"save\" value=\"Save\" id=\"addConference\"/>
<div class=\"spacer\"></div>
</g:form>
<g:hasErrors bean=\"${conferenceInstance}\">
<div class=\"errors\">
<g:renderErrors bean=\"${conferenceInstance}\" as=\"list\" />
</div>
</g:hasErrors>
</div>
会议控制器
def save = {
def conferenceInstance = new Conference(params)
if (conferenceInstance.save(flush: true)) {
flash.message = \"${message(code: \'default.created.message\',args: [message(code: \'conference.label\',default: \'Cferenceon\'),conferenceInstance.id])}\"
redirect(action: \"/index\")
}
else {
render(view: \"add\",model: [conferenceInstance: conferenceInstance])
}
}
解决方法
教人钓鱼
验证失败时,Grails脚手架会显示先前的值,因此查看此方法如何工作的最简单方法是运行:
grails generate-all Conference
然后研究生成的控制器和GSP的代码。
勺喂答案
问题出在您的GSP代码中,如果您指定
<g:datePicker name=\"startDate\" precision=\"day\" value=\"${new Date()}\"/>
日期选择器将始终显示今天的日期。同样,此文本字段将始终为空白:
<input type=\"text\" name=\"name\" />
因为您尚未指定value
属性。
当验证失败时,您需要从验证失败的Bean中获取值,因此将以上内容替换为:
<g:datePicker name=\"startDate\" precision=\"day\" value=\"${conferenceInstance?.date}\"/>
和
<input type=\"text\" name=\"name\" value=\"${conferenceInstance?.name}\"/>
,让我知道是否可行。
<div id=\"stylized\" class=\"myform\">
<g:form controller=\"conference\" action=\"save\">
<h1>Add New Conference Record</h1>
<p>Basic Information</p>
<label>Name
<span class=\"small\">Add your name</span>
</label>
<input type=\"text\" name=\"name\" value=\"${conferenceInstance.name}/><br>
...
...
<p>Dates</p>
<label>Start Date
<span class=\"small\">First Day</span>
</label>
<g:datePicker name=\"startDate\" precision=\"day\" value=\"${conferenceInstance.startDate}\"/><br><br>
<label>End Date
<span class=\"small\">First Day</span>
</label>
<g:datePicker name=\"endDate\" precision=\"day\" value=\"${conferenceInstance.endDate}\"/><br><br>
...
...
<g:submitButton name=\"save\" value=\"Save\" id=\"addConference\"/>
<div class=\"spacer\"></div>
</g:form>
<g:hasErrors bean=\"${conferenceInstance}\">
<div class=\"errors\">
<g:renderErrors bean=\"${conferenceInstance}\" as=\"list\" />
</div>
</g:hasErrors>
</div>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。