Spring 3.1.1.RELEASE を使用しています。JSP にエラー メッセージを表示するのに問題があります。コントローラーで使用しているメソッドは次のとおりです...
@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 です…</p>
<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
}
}