2013-01-03 46 views
1

我正在使用Spring 3.1.1.RELEASE。我無法在我的JSP上顯示錯誤消息。下面是我用在我的控制器的方法...爲什麼我的JSP頁面上不顯示Spring驗證錯誤?

@RequestMapping(value = "/save", method = RequestMethod.POST) 
public ModelAndView save(final HttpServletRequest request, 
         final Organization organization, 
         final Model model, 
         final BindingResult result) 
{ 
    String nextPage = "organizations/add"; 
    m_orgValidator.validate(organization, result); 
    if (!result.hasErrors()) 
    { 
     final boolean isUpdate = !StringUtils.isEmpty(organization.getId()); 
     // We need this clause to prevent detached entity errors. 
     if (StringUtils.isEmpty(organization.getId())) 
     { 
      organization.setId(null); 
     } // if 
     m_orgSvc.save(organization); 
     final String msgKey = isUpdate ? "org.updated.successfully" : "org.added.successfully"; 
     final Object[] args = new Object[0]; 
     request.setAttribute(STATUS, 
          MessageFormat.format(resourceBundle.getString(msgKey), args)); 

     nextPage = "landing"; 
    } else { 
     model.addAttribute(ORG_MODEL_NAME, organization); 
    } // if 

    return new ModelAndView(nextPage); 
} // save 

這是我的JSP ...

<c:url var="action" value="/organizations/save" /> 
    <form:form modelAttribute="org" method="post" action="${action}"> 
     <form:hidden path="id" /> 
     <fieldset> 
      <legend>Upload Fields</legend> 
      <p><form:errors path="*" cssClass="error" /></p> 
      <p> 
       <form:label for="name" path="name">Name *</form:label><br/> 
       <form:input path="name" type="text"/> 
      </p> 

我已經通過調試,我的驗證器設置錯誤正確(result.hasErrors(驗證)= true),但錯誤在我的頁面上顯示不正確。有任何想法嗎?如果有幫助,下面是我的驗證器類。

@Component 
public class OrgValidator implements Validator 
{ 

    @Autowired 
    private OrganizationService m_orgSvc; 

    … 

    public boolean supports(Class<?> clazz) 
    { 
     return Organization.class.isAssignableFrom(clazz); 
    } 

    public void validate(final Object target, 
         final Errors errors) 
    { 
     final Organization org = (Organization) target; 

     if (org != null && !StringUtils.isEmpty(org.getEodbId())) 
     { 
      final String eodbId = org.getEodbId(); 
      final Organization foundOrg = m_orgSvc.findByEodbId(eodbId); 
      if ((org.getId() == null && foundOrg != null) || 
       (org.getId() != null && foundOrg != null && !org.getId().equals(foundOrg.getId()))) 
      { 
       errors.rejectValue("eodbId", "AlreadyExists.org.eodb.id"); 
      } // if 
     } else if (org == null || org != null && StringUtils.isEmpty(org.getEodbId())) { 
      errors.rejectValue("eodbId", "NotExists.org.eodb.id"); 
     } // if 

     if (org == null || org.getOrganizationType() == null) 
     { 
      errors.rejectValue("organizationType", "Invalid.org.type"); 
     } // if 

     if (org == null || org.getCountry() == null) 
     { 
      errors.rejectValue("country", "Invalid.org.country"); 
     } // if 

     if (org == null || org.getState() == null) 
     { 
      errors.rejectValue("state", "Invalid.org.state"); 
     } // if 
    } 

} 

回答

2

的原因是BindingResult獲取綁定與與.organization結束,並試圖用這個後綴檢索它的名稱的請求屬性,而你的模型屬性名稱是org,這就是爲什麼它是無法找到您的模型的錯誤。

修復的方法是的模式命名屬性organization並在JSP也使用這個名字:

model.addAttribute("organization", organization); 


<form:form modelAttribute="organization" method="post" action="${action}"> 
     <p><form:errors path="*" cssClass="error" /></p> 
相關問題