【问题标题】:Grails databinding problemGrails 数据绑定问题
【发布时间】:2011-05-16 09:16:41
【问题描述】:

这里缺少什么,因为当验证失败时,呈现的页面不会显示先前引入的值,因此用户无法更正它。请用缺少的代码更新我的代码!一切正常,除了在验证失败后返回之前引入的值消失了。

添加.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])
        }
    }

【问题讨论】:

    标签: data-binding grails


    【解决方案1】:

    “教人钓鱼”答案

    当验证失败时,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}"/>
    

    【讨论】:

    • 谢谢伙计。我现在就试试,但按照你说的方式,我相信它会 100% 工作。 Every1 应该像你一样解释:p 非常感谢
    • @John,不客气,你介意我买一件印有“每个人都应该像你一样解释——约翰”的 T 恤吗
    【解决方案2】:

    让我知道这是否有效..

       <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>
    

    【讨论】:

    • 好的,我会尝试这两种情况。顺便说一句,两者之间的区别是“?”广告会议实例。这究竟意味着什么?
    • 实际上,'?' char很重要,我忘了!如果会议实例为空,则使用“?” char 防止抛出 nullPointerException。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    • 2017-02-16
    相关资源
    最近更新 更多