2017-12-31 50 views
0

username, password, email로 User 도메인을 만들었고 Command 객체를 사용하여 반복되는 비밀번호와 반복되는 이메일이 같은지 아닌지 확인하고 싶습니다 .Grails 커맨드 객체가 같은 url/page를 갖도록 모델로 리다이렉트

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"보기 : 나는 "urc.errors"을 호출 오류 형태를 컴파일 할 때

<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> 

, 그것은 나를에 리디렉션 나는 UserController을 만들었습니다/user/registration 그리고/user/register 대신에 오류를 표시합니다. 데이터를 잘못 입력하면 양식을 컴파일하고 데이터를 제출하거나 양식을 편집하기 위해 "사용자/등록"페이지 만 사용하는 방법이 있습니까?

답변

0

registerregistration 조치가 필요합니까? 사용자는 하나의 액션을 가질 수 있으며 사용자가 양식을 제출 한 경우에만 응답합니다.

컨트롤러 :

... 
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

나는 "params.register"를 사용하는 방법에 대해 생각하지 않았다, 그래서 나는 항상 있기 때문에 명령 개체를 사용하여이 작업을 사용하는 줄 알았는데 "null"오류가 반환되었습니다. 정말 고맙습니다! 그게 내가 원했던 방식이야! :) –

관련 문제