인프런 커뮤니티 질문&답변

김주영님의 프로필 이미지
김주영

작성한 질문수

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

정리

Exception evaluating SpringEL expression: "#fields.hasGlobalErrors()"

해결된 질문

작성

·

1.4K

·

수정됨

0

먼저 html은 다음과 같이 작성되어있습니다.

<form th:action method="post" th:object="${form}" enctype="multipart/form-data">
    <input class="form-control" accept=".txt" type="file">
    <div th:if="${#fields.hasGlobalErrors()}">
        <p class="field-error" th:each="err: ${#fields.globalErrors()}" th:text="${err}">전체 오류 메시지</p>
    <button class="btn btn-primary">Submit</button>
</form>

그리고 controller에서는 다음과 같이 작성했습니다.

@PostMapping
public String getFile(@Validated @ModelAttribute("form") ConvertInputForm inputForm, Model model, BindingResult bindingResult) {
    if (inputForm.getAttachFile() == null || inputForm.getAttachFile().isEmpty()) {
        bindingResult.reject("FileSelected", "파일을 다시 선택하세요.");
    }
    if (bindingResult.hasErrors()) {
        return "[위에 작성된 html]";
    }
    ...
}

ConvertInputForm은 다음과 같이 작성했습니다.

@Data
public class ConvertInputForm {
    private MultipartFile attachFile;
    @NotEmpty
    private String version;
}

위와 같이 코드를 작성하고 돌린 다음 파일을 선택하지 않고 버튼을 눌렀습니다.

버튼을 눌렀을때 제가 기대한 결과는 bindingResult에 reject("FileSelected", "파일을 다시 선택하세요.") 가 들어가고 html에서 ${#fields.globalErrors() 를 통해서 메시지를 받는 것입니다.

그런데 실제 결과는 버튼을 눌렀을때 다음과 같은 에러가 발생합니다.
org.thymeleaf.exceptions.TemplateProcessingException: Exception evaluating SpringEL expression: "#fields.hasGlobalErrors()"

구글링해보면서 해결해보려고 해도 모르겠습니다.

답변 1

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 김주영님

도움을 드리고 싶지만 질문 내용만으로는 답변을 드리기 어렵습니다.

실제 동작하는 전체 프로젝트를 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.

구글 드라이브 업로드 방법은 다음을 참고해주세요.

https://bit.ly/3fX6ygx


주의: 업로드시 링크에 있는 권한 문제 꼭 확인해주세요


추가로 다음 내용도 코멘트 부탁드립니다.

1. 문제 영역을 실행할 수 있는 방법

2. 문제가 어떻게 나타나는지에 대한 상세한 설명

감사합니다.

김주영님의 프로필 이미지
김주영
질문자

답변 감사합니다. 간발의 차이로 문제가 어디인지 알아내서 해결했습니다.

[문제가 된 부분]

아래처럼 GetMapping에 model을 넘겨주지 않아서 발생한 문제였습니다.

@GetMapping
public String choose() {
    return "[html]";
   }

[수정한 코드]

아래처럼 model을 추가해서 넘겨주지 정상적으로 동작하는 것을 확인했습니다.

@GetMapping
public String choose(Model model) {
    model.addAttribute("form", new ConvertInputForm());
    return "[html]";
   }
김주영님의 프로필 이미지
김주영

작성한 질문수

질문하기