gpt4 book ai didi

forms - Grails Command Object与模型重定向以具有相同的url/页面

转载 作者:行者123 更新时间:2023-12-02 15:45:56 25 4
gpt4 key购买 nike

我用用户名,密码和电子邮件创建了一个用户域,我想使用Command对象检查重复的密码和重复的电子邮件是否相同。我创建了一个UserController:

class UserController {

static scaffold = User

def register() { }

def registration(UserRegistrationCommand urc) {
if (urc.hasErrors()) {
render(view: 'register', model: [user: urc])
} else {
def user = new User(urc.properties)
user.profile = new Profile()
if (user.save()) {
flash.message = "Congratulations ${user.username}, you've been correctly registered. An email as been sent to ${user.email} in order to activate your account."
redirect(uri: '/')
} else {
return [user: user]
}
}
}
}

class UserRegistrationCommand {
String username
String password
String passwordRepeat
String email
String emailRepeat
static constraints = {
importFrom User
importFrom Profile

password(size: 6..8, blank: false, validator: {pwd, urc -> return pwd != urc.username})
passwordRepeat(nullable: false, validator: {pwd, urc -> return pwd == urc.password})

emailRepeat(nullable: false, email: true, validator: {addr, urc ->

return addr == urc.email})
}
}

并且只有一个“register.gsp” View :
    <html>
<head>
<meta name="layout" content="main">
</head>
<body>
<h1>Register New User</h1>
<g:hasErrors>
<div class="errors">
<g:renderErrors bean="${user}" as="list" />
</div>
</g:hasErrors>
<g:if test="${flash.message}">
<div class="flash">${flash.message}</div>
</g:if>
<g:form controller="user" action="registration" method="POST" >
<fieldset class="form">
<div class="fieldcontain required">
<label for="username">Username</label>
<g:textField name="username" required="" value="${user?.username}" />
</div>
<div class="fieldcontain required">
<label for="password">Password</label>
<g:passwordField name="password" required="" />
</div>
<div class="fieldcontain required">
<label for="passwordRepeat">Repeat Password</label>
<g:passwordField name="passwordRepeat" required="" />
</div>
<div class="fieldcontain required">
<label for="email">Email</label>
<g:textField name="email" required="" type="email" value="${user?.email}" />
</div>
<div class="fieldcontain required">
<label for="emailRepeat">Repeat Email</label>
<g:textField name="emailRepeat" required="" />
</div>
</fieldset>
<fieldset class="buttons">
<g:submitButton name="register" value="Register" />
</fieldset>
</g:form>
</body>
</html>

当我编译带有错误的表单(称为“urc.errors”)时,它将重定向我到/ user / registration,并且在那里出现错误,而不是我想要的/ user / register。有什么方法可以仅使用“用户/注册”页面来编译表单和提交数据,或者如果数据不正确则编辑表单?

最佳答案

您需要registerregistration操作吗?您可以只执行一个register操作,并且仅在用户提交表单(例如,

Controller :

...
def register(UserRegistrationCommand urc) {
if (params.register) {
if (urc?.hasErrors()) {
[user: urc]
} else {
def user = new User(urc.properties)
user.profile = new Profile()
if (user.save()) {
flash.message = "Congratulations ${user.username}, you've been correctly registered. An email as been sent to ${user.email} in order to activate your account."
redirect(uri: '/')
} else {
return [user: user]
}
}
}
}
...

gsp:
...
<g:form controller="user" action="register" method="POST" >
...

关于forms - Grails Command Object与模型重定向以具有相同的url/页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48043642/

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