2012-08-31 4 views
0

내 프로젝트 등록 페이지에 비밀번호 확인을 추가하고 싶습니다. 하지만 내 분야 중 하나의 가치에 문제가 있습니다. 모든 필드는 ok이지만 password2 필드는 확인 암호이며 User 도메인 클래스의 임시 필드입니다.Grails 폼 필드 항상 null

class User { 
String fullName 
String username 
String email 
String password 
String password2 

static transients = ['password2'] 

static constraints = { 
    username size: 5..15, blank: false, unique: true 
    email email: true, blank: false 
    password blank:false, size:5..15, matches:/[\S]+/, validator:{ val, obj -> 
     if (obj.password != obj.password2) 
      return 'user.password.dontmatch' 
    } 
} 
} 

컨트롤러의 일부 :

 if (request.method == 'POST') { 
     // create domain object and assign parameters using data binding 
     def u = new User(params) 
     if (! u.save()) { 
      // validation failed, render registration page again 
      flash.error = "error(s) creating user: Value of the confirmation password is: "+u.password2 
      //render(view:"/signup",model:[user:user]) 
      return [user:u] 
     } else { 
      // validate/save ok, store user in session, redirect to homepage 
      session.user = u 
      redirect(controller:'home') 
      return 
     } 
    } else if (session.user) { 
     // don't allow registration while user is logged in 
     redirect(controller:'home') 
     return 
    } 

그리고보기에서 부품 : 여기 내 도메인, 컨트롤러와 뷰 코드는

도메인 클래스입니다

<div><input class="pretty-input ${hasErrors(bean:user,field:'email','input-error')}" type="email" name="email" value="${user?.email}" ></input><span>— Enter email</span></div> 
<div><input class="pretty-input ${hasErrors(bean:user,field:'password','input-error')}" type="password" name="password"></input><span>— Choose a password</span></div> 
<div><input class="pretty-input ${hasErrors(bean:user,field:'password2','input-error')}" type="password" name="password2"></input><span>— Repeat the password</span></div> 

내 password2의 값이 항상 널이기 때문에 암호의 사용자 정의 유효성 검사를 제거하면 코드가 작동합니다. 왜 다른 모든 필드가 작동하지만 password2가 아닐 때 이런 일이 발생합니까?

+0

내 생각에는 사용자의 비밀번호 확인이 보이지 않습니다. 이것은 사용자가 사용하는 양식 필드 일뿐입니다. 나는 당신이 단지 params.password2 == user.password와 같은 확인 필드에 사용자의 패스워드를 비교해야한다고 생각한다. –

답변

3

기본 입력란은 기본적으로 바인드 가능하지 않으므로 매개 변수를 채울 수 없습니다.

당신은이 작업을 수행 할 수 있습니다

static constraints = { 
    ... your code here 
    password2 bindable: true 
} 

을하지만 그 조건의 유효성을 검사하는 명령 객체를 사용하는 것이 좋습니다, 그것은 영리하다.

+0

그게 효과가있다! 대답 해줘서 고마워. –