복붙노트

[SPRING] Freemarker 템플릿에 Spring MVC 유효성 검사 오류 표시

SPRING

Freemarker 템플릿에 Spring MVC 유효성 검사 오류 표시

컨트롤러가 바인딩 오류를 반환하면 내 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를 사용하여 이것을 달성 할 수있는 방법이 있습니까?

해결법

  1. ==============================

    1.표준 MVC JSP taglib을 사용하여이 작업을 수행하는 로터리 방식을 발견했습니다. 나는 이것을 Freemarker에게 제공한다 :

    표준 MVC JSP taglib을 사용하여이 작업을 수행하는 로터리 방식을 발견했습니다. 나는 이것을 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>
    
  2. ==============================

    2.다음과 같이 작성할 수 있습니다.

    다음과 같이 작성할 수 있습니다.

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

    BindStatus 및 Errors 클래스에 대한 자세한 정보.

  3. ==============================

    3.다음과 같이 시도해보십시오.

    다음과 같이 시도해보십시오.

    <@spring.bind "webPage" />
    <#if (spring.status.errors.allErrors?size > 0) >
        <@spring.message "my.global.error.code"/>
    </#if>
    
  4. ==============================

    4.http://static.springsource.org/spring/docs/current/spring-framework-reference/html/view.html#view-velocity-forms 문서를 참조하십시오. 그것은 당신이하고 싶은 것을 보여주는 예입니다.

    http://static.springsource.org/spring/docs/current/spring-framework-reference/html/view.html#view-velocity-forms 문서를 참조하십시오. 그것은 당신이하고 싶은 것을 보여주는 예입니다.

  5. from https://stackoverflow.com/questions/7556733/displaying-spring-mvc-validation-errors-in-freemarker-templates by cc-by-sa and MIT license