분류 전체보기 35

[Java] StringUtil.nvlStr() 사용법 정리

오늘도 어김없이 NullPointerException 발생... 문자열 null 처리 때문이었다.StringUtil.nvlStr() 메서드 사용법 확실히 정리하고 넘어가자. 1. nvlStr() 기본 개념일단 제일 기본적인 형태:// null이면 빈문자열("") 반환, 아니면 원래 값 반환String result = StringUtil.nvlStr(someString);  2. 직접 구현해보기회사 코드 보니까 이런 식으로 구현되어 있었다:public static String nvlStr(String str) { return str == null ? "" : str;}// 오버로딩된 버전도 있음public static String nvlStr(String str, String defaultValue)..

개발노트/Java 2025.01.11

[Spring] selectByPk 메서드

1. Primary Key로 조회하기기본 문법은 간단:User user = userMapper.selectByPk(userId);근데 이렇게만 쓰면 NullPointerException 위험이 있음. 항상 null 체크 해주자. // 내가 자주 쓰는 패턴User user = userMapper.selectByPk(userId);if (user == null) { throw new EntityNotFoundException("해당 유저 없음");}  2. MyBatis vs JPA 차이점MyBatis 쓸 때:@Mapperpublic interface UserMapper { @Select("SELECT * FROM users WHERE user_id = #{userId}") User sele..

개발노트/Spring 2025.01.10

[Spring] 폼 처리와 다국어 정리

1. Spring message 처리 alert("저장되었습니다."); // 하드코딩된 메시지alert('');alert(''); 실수한 것들:jsp 파일에서 스크립트 분리할 때 message 처리// 방법 1: 변수로 먼저 선언// 방법 2: 데이터 속성 활용'> 저장$('button').click(function() { alert($(this).data('msg'));});  2. Form Submit 처리처음에는 순수하게 했다가 실수함:// ❌ 이러면 validation 무시됨$("#searchFrm").submit();// ⭕ 이렇게 하자if($("#searchFrm")[0].checkValidity()) { // 1. action 설정 $("#searchFrm").attr..

개발노트/Spring 2025.01.09

[jQuery] Template 다루기 (x-jquery-tmpl)

1. 기본 문법   2. 실수했던 것들1. empty() 안하고 append 했다가 데이터 쌓임...// ❌ 잘못된 방법$("#dataList").append($("#myTemplate").tmpl(data));// ⭕ 올바른 방법$("#dataList").empty(); // 먼저 비우고$("#myTemplate").tmpl(data).appendTo("#dataList");   2. 변수명 오타\${name} \${userName}   3. 조건문에서 실수{{if status == "Y"}} // 작은따옴표로 해야함{{if status === 'Y'}}   4. null 체크 깜빡함\${obj.value} {{if obj}}\${obj.value}{{/if}}\${obj ? obj.value ..

개발노트/jQuery 2025.01.08

[JavaScript] 값 제어하기 - 숫자만 입력받기

오늘 개발하다가 input에서 숫자만 입력받는 부분에서 한참 삽질했다.평소엔 별거 아닌 것 같은데 보통 이런 게 더 귀찮... 😩다음에 또 삽질하기 싫어서 정리해둠! 1. 기본: 숫자만 입력처음에는 단순하게 했다:function onlyNumber(input) { input.value = input.value.replace(/[^0-9]/g, '');} 근데 이러면 안 되는 것들:소수점(.) 입력 불가능음수(-) 입력 불가능콤마(,) 입력 불가능maxlength 걸어도 복붙하면 통과됨 😱   2. 실전에서 쓸만한 버전 function controlNumber(input, options = {}) { let value = input.value; // 1. 옵션 설정 cons..

[jQuery] 데이터 입력 팝업창 구현하기

오늘 업무에서 데이터 입력 받는 팝업창 하나 만들었다.이거 자주 만드는데 매번 찾아보는 것 같아서 정리해둬야겠다 😅 기본 구조 데이터 입력    CSS는 늘 쓰는 거:/* position: fixed 안하면 스크롤 할 때 팝업이 같이 움직여서 불편함 */.popup_layer { position: fixed; top: 20%; left: 25%; width: 800px; z-index: 1000; /* dimLayer보다 위에 있어야 함 */}/* 버튼 간격 flex로 주니까 편하다 */.button_area { display: flex; justify-content: center; gap: 10px;}#..

개발노트/jQuery 2025.01.06

[jQuery] Ajax 데이터 처리 패턴 정리

오늘은 Ajax로 데이터 처리하면서 배운 내용들을 정리해본다.단순히 데이터를 주고받는 게 전부가 아니라는 걸 알게 됐다. 1. 기본적인 Ajax 호출가장 기본적인 형태의 Ajax 호출:$.ajax({ contentType: 'application/json; charset=utf-8', type: 'post', dataType: 'json', url: '/api/endpoint', data: JSON.stringify(requestData), success: function(response) { // 성공 처리 }, error: function(xhr, status, error) { // 에러 처리 }});   2. 데이터 가공해서 ..

개발노트/jQuery 2025.01.05

[jQuery] 체크박스 핸들링 (전체/개별 선택)

오늘은 체크박스 이벤트 처리하면서 배운 내용들을 정리해본다.처음에는 단순하게 생각했다가 여러 엣지케이스를 만나면서 꽤 많이 고생했다... 1. 전체 선택 구현가장 기본적인 전체 선택/해제 로직:// HTML// JavaScript$('#checkAll').change(function(){ // true/false 상태 가져오기 var checkState = $(this).prop("checked"); // 모든 개별 체크박스에 상태 적용 $('input:checkbox[name="chkConfirm"]').prop("checked", checkState); // 버튼 상태도 같이 제어 $('#btnSave').prop('disabled', !checkStat..

개발노트/jQuery 2025.01.04

[JavaScript] 날짜 유효성 검사 정리 (시작일/종료일)

오늘 검색 조건에 들어가는 날짜 유효성 검사 관련해서 배운 내용을 정리해본다.처음엔 단순히 시작일이 종료일보다 크면 안 된다는 조건만 체크했는데,실무에서는 훨씬 더 많은 걸 체크해야 한다는 걸 알게 됐다.  1. 기본적인 날짜 체크 시작일/종료일 관련해서 제일 기본적으로 체크해야 하는 것들:function validateDateRange() { // 1. 날짜 포맷 변환 (2024-01-01 형태로) const startDate = formatDate($('#startDate').val()); const endDate = formatDate($('#endDate').val()); // 2. 필수값 체크 if(!$.trim($("#startDate").val()) || !..

[Spring] SiteMesh - decorators.xml로 공통 레이아웃 관리

decorators.xml 파일은 SiteMesh의 레이아웃 설정을 담당하는 핵심 파일이다. 1. 기본 구조 **/*.htm /exclude/* /*    2. 주요 설정 요소defaultdir레이아웃 JSP 파일들의 기본 경로모든 decorator의 기준 디렉토리가 됨excludesSiteMesh를 적용하지 않을 URL 패턴들팝업창이나 특수 페이지에서 자주 사용decoratorname: 레이아웃 식별자page: 실제 JSP 파일 위치pattern: 적용될 URL 패턴 3. 레이아웃 사용법 공통 헤더 공통 푸터  ✅ 메모레이아웃 파일 내에서 에 각 페이지의 내용이 주입된다.파일 이름은 반드시 decorators.xml이어야..

개발노트/Spring 2025.01.02