【问题标题】:Grails edit and update database objectGrails 编辑和更新数据库对象
【发布时间】:2013-11-22 09:05:14
【问题描述】:

我正在尝试创建不使用脚手架的 grails 应用程序来更好地理解它的“思维方式”。 :) 我坚持使用编辑/更新方法。 在“编辑”按钮上,我打开与创建对象时相同的输入表单。 所有的字段都填写了信息,并在链接中传递了id。

在“编辑消息”上,我想更新现有对象,但我得到的只是创建新对象或出现错误 - 无法在空对象上设置属性“发件人”

我的“edit.gsp”看起来像这样:

    <!DOCTYPE html>
<html>
<head>
    <meta name="layout" content="main"/>


</head>
<body>
<h2>Edit this message</h2>

    <g:if test="${flash.message}">
    <div class="alert alert-error" style="display: block">${flash.message}</div>
    </g:if>
    <div class="createStuff" id ="inputs">
        <g:formRemote url="[action: 'editSave']" update="allTheMessages"
        name="updateStatusForm">
            <table>
                <tr>
                <td>Sender:</td>
                <td><g:textField name="sender" value="${message.author}"/></td>
                </tr>

                <tr>
                <td>Message</td>
                <td><g:textArea name="msg" value="${message.text}"/></td>
                </tr>
                <tr>
                <td>Some status</td>
                <td><g:textField name="status" value="${message.status}"/></td>
                </tr>
                <tr>
                <td>Wanna publish?</td>
                <td><g:select name="toPublish" from="${['Publish','Archive']}" keys="${[true,false]}"/></td>
                </tr>
            </table> 
            <g:submitButton name="Edit the msg"/>
        </g:formRemote>
    </div>

</body>
</html>

而且我在控制器中的方法有所不同:

  def editSave() {
        def message2save = Message.get(params.id)
        message2save = new Message(text: params.msg, author: params.sender, status: params.status, toPublish: params.toPublish).save(insert: false, update: true) //1st way - still creates new Message - obviously because of "new Message"
        message2save.sender = params.sender //part of 2nd way - in this case there appears NullPointerException mentioned above --> Cannot set property 'sender' on null object

        message2save.save()
        redirect(action:"index")

    }

我做错了什么?如何更新现有记录? 非常感谢提前。 :)

【问题讨论】:

    标签: java grails controller gsp


    【解决方案1】:

    当您从数据库成功加载一条记录时,GORM 知道您是否正在更新它。这是在您的代码中完成的:

    def message2save = Message.get(params.id)
    

    问题是您没有在表单中发送消息的 ID。所以你需要添加:

    <g:hiddenField name="id" value="${message.id}" />
    

    【讨论】:

    • 太棒了,谢谢。我知道这很容易。现在就像一个魅力。 :) 你拯救了我的一天。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-10
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 2015-05-28
    • 2023-04-11
    • 1970-01-01
    相关资源
    最近更新 更多