2011-07-27 50 views
0

我嘗試使用spring和freemarker編寫密碼驗證程序。 BindingResult查看錯誤,但它們沒有顯示 - spring.status.errorMessages?size返回0. Validator獲取正確的密碼,因爲我檢查了。 PasswordForm是一個帶密碼的java類。我把下面的片段。freemarker中的驗證錯誤

輸入形式:

<tr> 
    <td><@m.formPassword path='passwordForm.passwordOld' label='user.passwordOld' classes='' attr=''/></td> 
    <td><@m.fieldErr /></td> 
</tr> 

其中m:從macros.ftl

"macros.ftl" as m 

二手宏:

<#macro fieldErr> 
<#if (spring.status.errorMessages?size > 0)> 
<label> blaaad</label> 
</#if> 
<label> size=${spring.status.errorMessages?size}</label> 
</#macro> 

<#macro formPassword path label='' classes='' attr='' required=false> 
<@spring.bind "${path}" /> 
<#assign error = '' /> 
<#if (spring.status.errorMessages?size > 0)> 
<#assign error = 'err' /></#if> 
<#if label??> 
<br/> 
<label class="inputLabel ${error} <#if required>required </#if>"><@spring.message code="${label}" /></label> 
</#if> 
<@spring.formPasswordInput path="${path}" attributes='class="inputText ${classes} ${error}" AUTOCOMPLETE="off" ' /> 
<#if (spring.status.errorMessages?size > 0)> 
    <span class="err">${spring.status.errorMessage}</span> 
</#if> 
</#macro> 

控制器:

@RequestMapping(method = RequestMethod.POST) 
public String onSubmit( 
     @ModelAttribute("passwordForm") PasswordForm passwordForm, 
     BindingResult result, 
     ModelMap model, 
     SessionStatus sessionStatus, 
     HttpSession session) { 


    passwordValidator.validate(passwordForm, result); 


    if(result.hasErrors()) 
     return redirect(view); 


    return redirect(View.MAIN); 
} 

Validator:

@Override 
public void validate(Object target, Errors errors) { 

    PasswordForm passwordForm = (PasswordForm) target; 
    String passwordOld = passwordForm.getPasswordOld(); 
    String passwordNew = passwordForm.getPasswordNew(); 
    String passwordNewRepeat = passwordForm.getPasswordNewRepeat(); 

    if (StringUtils.isBlank(passwordOld)) { 
     errors.rejectValue("passwordOld", "password.blank"); 
    } 


    if (!StringUtils.equals(passwordNew, passwordNewRepeat)) { 
     errors.rejectValue("passwordNewRepeat", "password.notmatch"); 
     errors.rejectValue("passwordNew", "password.notmatch"); 
    } 

} 

任何人都可以幫忙嗎?控制檯中沒有錯誤。

+0

已解決。我在onSubmit方法中做出錯誤的重定向。 – mmmar123

回答

0

您的代碼:

if(result.hasErrors()) 
     return redirect(view); 

它看起來像你一個新的請求重定向。你不能REDIRECT,你必須直接返回視圖而不用重定向。


看看my answer到類似的問題。這表明何時使用重定向以及何時直接返回視圖。