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.gsp은 Grails 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과 가능한가요? 클라이언트 또는 서버 측에서 테스트 된 조건은 어디에 있습니까? (나는 검사의 일부가 클라이언트 측에 있다고 생각하지만 모든 제한 사항은 서버 측에서 다시 점검된다.)
hmmm, 그렇지 않아야합니다 :' '? –
그 코드 줄에 같은 문제가 있습니다 :'static transients = [ 'confirmarPassword']'를 변경하면 클래스 [class usuario.Usuario]의 속성 [confirmarPassword] 값이 [null] 인 사용자 정의 유효성 검증을 통과하지 못합니다. :/ – chelder