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>