gpt4 book ai didi

java - Grails 编辑和更新数据库对象

转载 作者:行者123 更新时间:2023-12-02 06:33:17 25 4
gpt4 key购买 nike

我正在尝试创建不使用脚手架的 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>

我在 Controller 中的方法有所不同:

  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}" />

关于java - Grails 编辑和更新数据库对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19891511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com