Ich habe eine Benutzerdomäne mit Benutzername, Passwort und E-Mail erstellt und möchte Command Objekt verwenden, um zu überprüfen, ob das Passwort wiederholt und wiederholte E-Mails gleich sind oder nicht . Ich habe ein Usercontroller erstellt:Grails Command Object Redirect mit Modell, um die gleiche URL/Seite zu haben
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})
}
}
Und nur eine „register.gsp“ Ansicht:
<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>
Wenn ich Form mit Fehlern kompilieren, die „urc.errors“ nennen, es leitet mich/user/registration und es erscheinen dort Fehler statt/user/register so wie ich es möchte. Gibt es eine Möglichkeit, nur die Seite "user/register" zu verwenden, um das Formular zu kompilieren und Daten zu senden oder das Formular zu bearbeiten, wenn die Daten falsch sind?
ich nicht über die Verwendung von "params.register" dachte, so dass ich dachte, dass ich zwei Aktionen verwenden musste immer, weil es Befehl Objekt zu verwenden gab "null" Fehler zurück. Ich danke dir sehr! So wollte ich es haben! :) –