2013-08-20 5 views
2

사용자 확인 양식에 필드 확인 암호를 추가하려고합니다.Grails Fields Plugin에서 transients 도메인 속성을 사용하는 방법

package usuario 

class Usuario { 

    transient springSecurityService 

    String password 
    String confirmarPassword 

    static constraints = { 

     password blank: false, password: true, size:5..15, matches:/[\S]+/ 
     confirmarPassword blank:false, password: true, size:5..15, matches:/[\S]+/, validator:{ val, obj -> 
      if (obj.password != obj.confirmarPassword) 
       return 'usuario.password.dontmatch' 
     } 

    } 

    static transients = ['confirmarPassword'] 

    static mapping = { 
     password column: '`password`' 
    } 

    Set<Rol> getAuthorities() { 
     UsuarioRol.findAllByUsuario(this).collect { it.rol } as Set 
    } 

    def beforeInsert() { 
     encodePassword() 
    } 

    def beforeUpdate() { 
     if (isDirty('password')) { 
      encodePassword() 
     } 
    } 

    protected void encodePassword() { 
     password = springSecurityService.encodePassword(password) 
    } 
} 

obj.confirmarPassword이 항상 null 때문에 제약 조건이 달성되지 않습니다 입니다 : 이것은 내 도메인 클래스의 추출물이다.

Grails Templates는 here으로 설치되었습니다. 속성 persistentProperties을 변경했으나 _ form.gsp에만 있으며 _ form.gspGrails Fields Plugins에서 사용하지 않습니다. 따라서 인터넷 브라우저에 과도 특성이 나타나지 않습니다.

나는 create.gsp하는 _form.gsp의 생성 된 과도 속성 기술 :

<fieldset> 
    <g:form class="form-horizontal" action="create" > 

     <div class="fieldcontain ${hasErrors(bean: usuarioInstance, field: 'confirmarPassword', 'error')} required"> 
      <label for="confirmarPassword"> 
       <g:message code="usuario.confirmarPassword.label" default="Confirmar Password" /> 
       <span class="required-indicator">*</span> 
      </label> 
      <g:field type="password" name="confirmarPassword" maxlength="15" pattern="${usuarioInstance.constraints.confirmarPassword.matches}" required="" value="${usuarioInstance?.confirmarPassword}"/> 
     </div> 

     <fieldset>   
      <f:all bean="usuarioInstance"/> 
      <div class="form-actions"> 
       <button type="submit" class="btn btn-primary"> 
        <i class="icon-ok icon-white"></i> 
        <g:message code="default.button.create.label" default="Create" /> 
       </button> 
      </div> 
     </fieldset> 
    </g:form> 
</fieldset> 

속성은 화면에 나타나는 과도하지만 obj.confirmarPassword 여전히

마지막 방법입니다 I 이 임시 속성을 사용하려면 views_fields \ default_field.gsp을 수정하는 것이 좋지만 어떻게 찾지 못했습니다. 이것은 the documentation입니다. 해당 파일의 내용입니다 :

<%@ page defaultCodec="html" %> 
<div class="control-group ${invalid ? 'error' : ''}"> 
    <label class="control-label" for="${property}">${label}</label> 
    <div class="controls"> 
     <%= widget %> 
     <g:if test="${invalid}"><span class="help-inline">${errors.join('<br>')}</span></g:if> 
    </div> 
</div> 

Grails Fields Plugin과 가능한가요? 클라이언트 또는 서버 측에서 테스트 된 조건은 어디에 있습니까? (나는 검사의 일부가 클라이언트 측에 있다고 생각하지만 모든 제한 사항은 서버 측에서 다시 점검된다.)

+0

hmmm, 그렇지 않아야합니다 :''? –

+0

그 코드 줄에 같은 문제가 있습니다 :'static transients = [ 'confirmarPassword']'를 변경하면 클래스 [class usuario.Usuario]의 속성 [confirmarPassword] 값이 [null] 인 사용자 정의 유효성 검증을 통과하지 못합니다. :/ – chelder

답변

관련 문제