Spring + portlet错误没有在jsp上显示

时间:2013-05-30 21:43:27

标签: spring spring-mvc portlet spring-portlet-mvc

Spring 3,Portlet API

我无法在jsp页面上显示验证错误消息,尽管bindingResult.hasErrors()在我的动作映射中返回true,以下是我的代码。 任何帮助赞赏。

以下是我的JSP代码

<portlet:actionURL var="searchDeviceResultsURL">
    <portlet:param name="doAction" value="searchDeviceResults" />
</portlet:actionURL>

<form:form method="post" action="${searchDeviceResultsURL}">
<div>
<form:errors path="*" />
</div>
...

<input id="sourceId" /> 
...
</form:form>

以下是我的控制器

@RenderMapping
    public String home(RenderResponse response) {
        return "startup";
    }


    @ModelAttribute("searchForm")
    public SearchForm getCommandObject() {
        return new SearchForm();
    }

    @RenderMapping(params = "doAction=showDeviceResults")
    public String showResults() {
        //return device result JSP name

        return "device_results";
    }

    @ExceptionHandler({ Exception.class })
    public String handleException() {
        return "error";
    }

    /*
     * On submit form this action searches for available devices
     */
    @ActionMapping(params = "doAction=searchDeviceResults")
    public void searchResults(@ModelAttribute(value = "searchForm") SearchForm searchForm, BindingResult bindingResult, 
            ActionResponse response, SessionStatus sessionStatus) {

        searchFormValidator.validate(searchForm, bindingResult);

        if (!bindingResult.hasErrors()) {

            response.setRenderParameter("doAction", "showDeviceResults");
            sessionStatus.setComplete();
        }

    }

以下是我的验证员

public class SearchFormValidator implements Validator {

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

    public void validate(Object target, Errors errors) {
        //SearchForm searchForm = (SearchForm)target;
        ValidationUtils.rejectIfEmptyOrWhitespace(errors, "serviceId", "search.service.field.error");
        ValidationUtils.rejectIfEmptyOrWhitespace(errors, "sourceId", "search.source.field.error");
        //errors.rejectValue("serviceId", "search.service.field.error");
        //errors.rejectValue("sourceId", "search.source.field.error");  
    }
}

以下是我的弹簧配置

<bean id="searchFormValidator" class="com.comcast.triage.form.SearchFormValidator" />

<bean
    class="org.springframework.web.portlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="webBindingInitializer">
        <bean
            class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
            <property name="validator" ref="searchFormValidator" />
        </bean>
    </property>
</bean>

在我的portlet.xml文件中,我有以下运行时选项

<container-runtime-option>
        <name>javax.portlet.actionScopedRequestAttributes</name>
        <value>true</value>
    </container-runtime-option>
    <container-runtime-option>
        <name>javax.portlet.renderHeaders</name>
        <value>true</value>
    </container-runtime-option>
    <container-runtime-option>
        <name>javax.portlet.escapeXml</name>
        <value>false</value>
    </container-runtime-option>

1 个答案:

答案 0 :(得分:0)

进行了两次更改,事情开始起作用

1- form tag
2- form input tag

    <form:form name="searchDeviceForm" commandName="searchForm" method="post" action="${searchDeviceResultsURL}">

<form:input path="accNum" />