강의

멘토링

로드맵

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

보물섬님의 프로필 이미지
보물섬

작성한 질문수

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

회원 등록

비어있는 memberForm 객체를 전달하는 이유가? 2

작성

·

244

0

안녕하세요.

검증이랑 일관성을 해결하려고 아래와 같이 해보려 했는데.

<form role="form" action="/members/new" method="post">
  <div class="mt-3 mb-3">
    <label class="form-label text-uppercase" th:for="name">이름</label>
	  <input class="form-control" type="text" name="name" id="name" th:value="${memberForm != null ? memberForm.name : ''}" autofocus placeholder="이름을 입력하세요"/>
	  ....

타입리프의 구조때문인지 #fields 같은걸 쓰려니깐 th:object가 있어야 겠더라구요.

그리서 이번엔 어찌어찌 해서 밑에 처럼 해봤는데 일단 작동은 하더라구요.

<th:block th:if="${memberForm != null}">
  <form role="form" action="/members/new" method="post" th:object="${memberForm}">
    <div class="mt-3 mb-3">
	  <label class="form-label text-uppercase" th:for="name">이름</label>
	  <input class="form-control" type="text" th:field="*{name}" autofocus placeholder="이름을 입력하세요"/>
	  <p th:if="${#fields.hasErrors('name')}" th:errors="*{name}">Incorrect date</p>
	  ...
</th:block>
<th:block th:unless="${memberForm != null}">
  <form role="form" action="/members/new" method="post">
    <div class="mt-3 mb-3">
	  <label class="form-label text-uppercase" th:for="name">이름</label>
	    <input class="form-control" type="text" id="name" name="name" autofocus placeholder="이름을 입력하세요"/>
		...
</th:block>

그럼 일단 말씀해주신 문제가 해결된거 같긴한데 저러면 문제가 form 이 수정될때마다 2번씩 작업해줘야 되는 문제도 있고, viewTemplate 검증부분은 회원등록을 submit해서 실패 할때까지는 알수 없어서

속편하게 비어있는 memberForm 객체를 보내주는게 여러모로 편리하다라고 이해하면 될까요? 그리고 컴파일은 되고 실행도 되는데 인텔리제이에서 memberForm 이 없다고 나오네요.

궁금한게 있으면 잠이 안오는 성격이라 쓸데 없는 질문 드려서 죄송합니다.ㅡㅡ

퀴즈

61%나 틀려요. 한번 도전해보세요!

회원 가입 시 화면 입력 데이터를 엔티티 객체 대신 별도의 Form 객체로 받는 주된 이유는 무엇일까요?

데이터베이스 성능을 최적화하기 위해서

화면 종속적인 데이터나 유효성 검증 로직을 분리하기 위해서

JPA 영속성 컨텍스트와 직접적인 관계를 맺기 위해서

코드의 자동 생성 기능을 활용하기 위해서

답변 1

0

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

안녕하세요. 보물섬님

생각하신 부분이 맞습니다. 추가로 타임리프의 th:object, th:field 기능을 사용하려면 객체가 필요합니다.

인텔리제이에서 폼 정보를 인식을 못하는 경우도 종종 있더라구요.

감사합니다.

보물섬님의 프로필 이미지
보물섬

작성한 질문수

질문하기