簡體   English   中英

Grails編輯和更新數據庫對象

[英]Grails edit and update database object

我正在嘗試創建grails應用程序,而不是使用Scaffolding來更好地理解它的“思維方式”。 :)我被編輯/更新方法困住了。 在“編輯”按鈕上,我打開與創建對象時相同的輸入形式。 所有字段都填充了信息,ID在鏈接中傳遞。

在“編輯消息”我想要更新現有對象,但我所擁有的只是創建新的或有錯誤 - 無法在null對象上設置屬性'sender'

我的“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")

    }

我究竟做錯了什么? 如何更新現有記錄? 非常感謝提前。 :)

當您從數據庫成功加載記錄時,GORM知道您是否正在更新記錄。 這是在您的代碼中完成的:

def message2save = Message.get(params.id)

問題是您沒有在表單中發送消息的ID。 所以你需要添加:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM