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 대신에 오류를 표시합니다. 데이터를 잘못 입력하면 양식을 컴파일하고 데이터를 제출하거나 양식을 편집하기 위해 "사용자/등록"페이지 만 사용하는 방법이 있습니까?
나는 "params.register"를 사용하는 방법에 대해 생각하지 않았다, 그래서 나는 항상 있기 때문에 명령 개체를 사용하여이 작업을 사용하는 줄 알았는데 "null"오류가 반환되었습니다. 정말 고맙습니다! 그게 내가 원했던 방식이야! :) –