Отображение ошибок валидации Spring MVC в шаблонах Freemarker - PullRequest
3 голосов
/ 26 сентября 2011

Я пытаюсь отобразить список глобальных ошибок проверки в моем шаблоне freemarker, если контроллер возвращает ошибки привязки.Я могу отображать ошибки, связанные с полем, но я хочу определить, когда произошла ошибка в конкретном компоненте, и отобразить сообщение в верхней части страницы.Я попытался использовать приведенный ниже пример, который не производит вывод:

<@spring.bind "webPage" />
....
<#if spring.status.error>
There were problems with the data you entered:
<ul>
<#list spring.status.errorMessages as error>
<li>${error?html}</li>
</#list>
</ul>
</#if>

В строке ниже всегда возвращается 0, несмотря на наличие ошибок в отправленной форме:

${spring.status.errorMessages?size}

Мой код контроллераниже:

@RequestMapping(method = RequestMethod.POST)
public ModelAndView save(@ModelAttribute("webPage") @Valid WebPage page, BindingResult result, Model model) {
    if (!model.containsAttribute("site")) {
        throw new IllegalArgumentException("Model must contain site attribute.");
    }
    Site site = (Site) model.asMap().get("site");
    if (!result.hasErrors() && !page.isNew()) {
        this.pageService.save(page, site);
    } else if (!result.hasErrors() && page.isNew()) {
        this.pageService.create(page, site);
    } 
    return createMav(result);
}

Ниже приведен метод createMav:

public ModelAndView createMav(BindingResult result) {
    ModelAndView mav = new ModelAndView();
    mav.setViewName(getPrimaryControllerView());
    mav.addAllObjects(result.getModel());
    return mav;
}

Есть ли способ добиться этого с помощью Freemarker + Spring MVC?

Ответы [ 4 ]

2 голосов
/ 28 сентября 2011

Я нашел обходной способ сделать это, используя стандартную библиотеку тегов MVC JSP.Я делаю это доступным для Freemarker:

<#assign form=JspTaglibs["http://www.springframework.org/tags/form"] />

Затем я использую следующий макрос для отображения глобального сообщения об ошибке:

<#macro formErrors>
    <#assign formErrors><@form.errors path="*" /></#assign>
    <#if formErrors?has_content>
        <div id="errors">
            <@spring.message "admin.error.globalMessage" />
        </div>
    </#if>
</#macro>

Я просто помещаю следующую строку, где бы я ни хотел это сообщение об ошибкепоявляться (это должно содержаться в элементе формы, который отправляется в контроллер):

<@form.form method="POST" commandName="webPage">

            <@formErrors />                        
            ....
</@form.form>
1 голос
/ 08 августа 2012

Попробуйте что-то вроде этого:

<@spring.bind "webPage" />
<#if (spring.status.errors.allErrors?size > 0) >
    <@spring.message "my.global.error.code"/>
</#if>
1 голос
/ 28 июня 2012

Вы можете написать так:

<#if spring.status.error>
<ul>
   <#list spring.status.errors.globalErrors as error>
   <li>${error.defaultMessage}</li>   
   </#list>
</ul>
</#if>

Больше информации на BindStatus и Ошибки классы.

0 голосов
/ 26 сентября 2011

См. Документацию: http://static.springsource.org/spring/docs/current/spring-framework-reference/html/view.html#view-velocity-forms. Это пример того, что вы хотите сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...