如何在视图页面中更改域 class 的值
How do I change a value of a domain class in view page
我有一个管理域 class,我正在尝试更改它的变量 pass
,因为它被设置为默认值 admin123
当我阅读 Grails 文档时,我了解到 remoteField
它可以更改域 class 中的值,但是当我在文本字段中输入新值并单击时没有任何反应输入。
这是我的管理域 class,pass
作为变量,changePassword
作为应该在 remoteField
中调用的函数
class Admin {
String pass = "admin123"
static constraints = {
pass size: 5..15, blank: false
}
def changePassword() {
def a = new Admin()
a.pass = params.value
a.save()
}
}
这是允许管理员更改密码的changePassword.gsp
<h5>Your old password is "${oldPass}"</h5>
<h3>Please input your new password</h3>
<g:remoteField action="changePassword" name="pass" value="${admin?.pass}" />
这是 changePassword
的管理控制器方法,用于显示 oldPass
def changePassword = {
def admin = new Admin()
def oldPass = admin.pass
[oldPass: oldPass]
}
如果您查看 the docs 的 remoteField
,您会看到它在更改时发送一个事件。当此更改时,它会将值发布到操作 changePassword
。在 changePassword
中,默认参数名称是 value
。所以像..
def admin = Admin.get(params.id);
admin.pass = params.value;
admin.save(flush: true, failOnError: true);
这将保存管理对象。
注意
您正在以明文形式保存密码。不要这样做。您应该在存储之前对密码进行哈希处理。为此,您可以将 beforeInsert
事件挂钩添加到域对象中。
def beforeInsert() {
this.pass = // You can work this out. Hash the password!
}
编辑
来自文档。
This tag creates an input field that fires an AJAX request when its value changes (typically when the user presses return inside the field).
当用户在字段内点击回车键或值发生变化时,将触发该事件。不需要提交按钮。这不会提交任何内容。这是一个 AJAX POST.
我有一个管理域 class,我正在尝试更改它的变量 pass
,因为它被设置为默认值 admin123
当我阅读 Grails 文档时,我了解到 remoteField
它可以更改域 class 中的值,但是当我在文本字段中输入新值并单击时没有任何反应输入。
这是我的管理域 class,pass
作为变量,changePassword
作为应该在 remoteField
class Admin {
String pass = "admin123"
static constraints = {
pass size: 5..15, blank: false
}
def changePassword() {
def a = new Admin()
a.pass = params.value
a.save()
}
}
这是允许管理员更改密码的changePassword.gsp
<h5>Your old password is "${oldPass}"</h5>
<h3>Please input your new password</h3>
<g:remoteField action="changePassword" name="pass" value="${admin?.pass}" />
这是 changePassword
的管理控制器方法,用于显示 oldPass
def changePassword = {
def admin = new Admin()
def oldPass = admin.pass
[oldPass: oldPass]
}
如果您查看 the docs 的 remoteField
,您会看到它在更改时发送一个事件。当此更改时,它会将值发布到操作 changePassword
。在 changePassword
中,默认参数名称是 value
。所以像..
def admin = Admin.get(params.id);
admin.pass = params.value;
admin.save(flush: true, failOnError: true);
这将保存管理对象。
注意
您正在以明文形式保存密码。不要这样做。您应该在存储之前对密码进行哈希处理。为此,您可以将 beforeInsert
事件挂钩添加到域对象中。
def beforeInsert() {
this.pass = // You can work this out. Hash the password!
}
编辑
来自文档。
This tag creates an input field that fires an AJAX request when its value changes (typically when the user presses return inside the field).
当用户在字段内点击回车键或值发生变化时,将触发该事件。不需要提交按钮。这不会提交任何内容。这是一个 AJAX POST.