1

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
    }

}
4

1 に答える 1

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>
于 2013-01-04T02:14:45.933 に答える