중복 오류 메시지를 성배합니다
-
05-07-2019 - |
문제
나는 성배를 처음 접했고 문제가 있습니다.
이 gsp의 스 니펫이 있습니다.
<g:form url="[controller:'main',action:'login']">
<label for="name">Usuario:</label><br/>
<input type="text" name="name" /><br/>
<label for="pass">Password:</label><br/>
<input type="password" name="password"/><br/>
<input type="submit" value="Login"/><br/>
<g:renderErrors bean="${cmd}"/>
</g:form>
컨트롤러 (maincontroller.groovy)는 명령 개체를 사용합니다. 다음은 다음과 같습니다.
def login = { LoginCommand cmd ->
if(cmd.validate()){
redirect(action:'ok')
}else{
render(view:'index',model:[cmd:cmd])
}
}
class LoginCommand {
String name
String password
static constraints = {
name(blank:false,size:5..10)
password(blank:false,size:5..10)
}
}
문제는 내가 나쁜 이름을 입력하거나 패스 할 때 (빈 또는 범위 외부)라는 것입니다. 4 개의 오류, 비밀번호의 경우 2 개, 사용자 이름은 2 개를 보여줍니다.. 그것들은 동일하지만 복제되었습니다.
"bool validecommand () {name && password}"메소드를 작성하고 명령으로 대체하는 것은 중복을 던지지 않지만 Grails의 제약 조건 기능을 사용하여 물건을 건조하게 유지하고 싶습니다.
왜 이런 일이 일어나는지 아십니까? 정말 고마워!
해결책
명령 개체를 컨트롤러 동작에 주입하면 성배가 실행됩니다. validate()
자동으로, 수동으로 호출 할 필요가 없습니다. 노력하다
if(!cmd.hasErrors())
대신에
if(cmd.validate())
모든 전화에 대한 것 같습니다 validate()
명령 개체에 새 (복제) 오류가 추가됩니다. IMHO 이것은 일어나서는 안되며 아마도 성배의 버그 일 것입니다. 당신은 고려해야합니다 보고 이 문제.
제휴하지 않습니다 StackOverflow