2017-12-31 126 views
0

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?

Antwort

0

Benötigen Sie eine Aktion register und Aktion? Sie könnten einfach die eine register Aktion haben und nur antworten, wenn der Benutzer das Formular z.

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" > 
... 
+0

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! :) –

Verwandte Themen