회원 가입시 발생한 문제점 : DB에 email 컬럼에 이메일 아이디와 직접입력 또는 사용자가 선택한 이메일 주소를 묶어서 같이 저장해야 하는데, 자꾸 이메일 아이디만 저장된다.
MemberEntity
@Entity
@Data
@SequenceGenerator(name = "member_SEQ", sequenceName = "member_SEQ", allocationSize = 1)
@EntityListeners(AuditingEntityListener.class)
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "member_SEQ")
private Long memberId;
private String username;
private String password;
private String name;
private String email;
private String phoneNumber;
private String homeAddress;
@CreatedDate
@LastModifiedDate
private LocalDateTime createdAt;
private LocalDateTime modifiedAt;
private LocalDateTime withdrawnAt;
private Character isWithdrawn;
}
Member 엔티티는 이메일 컬럼이 한개만 있기 때문에 사용자가 입력한 이메일 아이디와 @ , 이메일 주소를 한 번에 묶어서 DB에 저장해야 한다.
따라서 register.jsp의 이메일을 입력받는 부분을 3등분? 해준다.
<div>
<input id="emailId" required><span id="middle">@</span><input id="emailAddress">
<select class="form-select" aria-label="Default select example" id="emailOption"
onchange="handleEmailOption()">
<option value="input">직접입력</option>
<option value="@naver.com">@naver.com</option>
<option value="@hanmail.net">@hanmail.net</option>
<option value="@google.com">@google.com</option>
<option value="@apple.com">@apple.com</option>
</select>
<input type="hidden" id="totalEmail" name="email" value="">
</div>
<input id="emailId" required><span id="middle">@</span><input id="emailAddress">
아이디 받는 부분, @ 들어가는 부분과 주소가 들어가는 부분으로 나누어 주고, 각 input에 id를 부여해준다.
그러면 사용자가 아이디와 주소를 직접 입력하거나 선택한다.
$("#emailId, #emailAddress, #emailOption").on('blur change', function() {
email();
});
function email() {
const emailId = $("#emailId").val();
const middle = $("#middle").text();
const emailAddress = $("#emailAddress").val();
if(emailId != null && emailAddress != null) {
$("#totalEmail").val(emailId+middle+emailAddress);
}
}
.on('blur change', function() { ... }); 는 선택된 요소들에 이벤트 핸들러를 연결하는 jQuery 메서드로
여기서는 blur와 change 이벤트에 대한 핸들러를 연결한다.
- blur 이벤트는 해당 요소가 포커스를 잃을 때 발생한다.
- change 이벤트는 입력 요소의 값이 변경될 때 발생한다.
function() { email(); }); 은 지정된 이벤트가 선택된 요소들에서 발생할 때 실행할 콜백 함수로 email ( ) 함수를 호출한다.
email ( ) 함수에서는 사용자가 입력한 emailId와 @와 이메일 주소 값을 추출해서 변수에 저장하고
emailId와 emailAddress가 모두 null이 아니라면, #totalEmail이라는 요소의 값을 emailId + middle + emailAddress로 설정한다.
<input type="hidden" id="totalEmail" name="email" value="">
#totalEmail의 name은 "email"로 내가 정한 DB 컬럼에 저장이 된다.
function handleEmailOption() {
var emailOption = $("#emailOption").val();
if (emailOption === "input") {
$("#emailAddress").val("").attr("disabled", false);
} else {
$("#emailAddress").val(emailOption.replace("@", "")).attr("disabled", true);
}
}
if (emailOption === "input") {
만약 emailOption 값이 input인 경우 ( 사용자가 직접 입력을 선택한 경우 ) #emailAddress 요소의 값을 비우고 ( disabled 속성을 해제하고 ) 사용자가 입력할 수 있도록 설정한다.
} else {
그렇지 않으면 ( 사용자가 직접 입력을 선택하지 않은 경우 ), #emailAddress 요소의 값을 emailOption에서 @ 문자를 제거한 값으로 설정하고, 입력 필드를 비활성화 해준다.
'프로젝트' 카테고리의 다른 글
영화 예매 사이트 (MoVieCinema) - 영화 리뷰 수정 (AJAX) (0) | 2024.04.13 |
---|---|
영화 예매 사이트 (MoVieCinema) - 영화 리뷰 목록에 작성자 표시 (0) | 2024.04.13 |
영화 예매 사이트 (MoVieCinema) - 댓글 조회 및 페이징 (AJAX) (0) | 2024.04.13 |
가전제품 대여 웹사이트 (세숫대여) - 대댓글 작성 (0) | 2023.10.10 |
가전제품 대여 웹사이트 (세숫대여) - 로그인한 작성자로 기록 (0) | 2023.10.05 |