null은 맞는데 정확하게 null은 아닌...마치 내꺼인 듯 내꺼 아닌 내꺼 같은
➕ 230118 추가
수업시간에 파라미터 넘기는 이야기하다가 선생님이 흘리듯이 이것도 설명해주셨는데 ""
이 넘어온다고 하셨다!
널스트링이 넘어가는 거니까 어쨌든 null 아닌 건 맞네ㅎㅎ
가 아니고
널스트링이 넘어와서 형변환을 못해서 NULL 오류가 생기는 거라고 했음
""
은 int 타입으로 형변환을 못하니까?
마침 오류도 NullPointerException이 아니라 NumberFormatException이었음!
그러면 null을 0으로 바꾸는 방법이라기보다는 "" 대신 0을 넘기는 방법이라고 하는 게 더 맞을 것 같다ㅎㅎ
int타입 데이터에 아무 값도 넣지 않고 폼파라미터를 넘기게 되면 오류가 발생하는데
아무 값도 넣지 않는 대신 0을 넣어 오류가 생기지 않도록 하는 것이다.
물론 0 대신 다른 값을 넣어도 됨!
나는 할인율 적용에 쓸 거라서 할인 없는 상태 = 0
으로 만드는 작업을 위해 0으로 설정했다.
⭐ html
<tr>
<th>판매가 & 할인</th>
<td>
<input type="number" required="required" name="price">원<br>
<hr>
<input type="radio" checked="checked" name="disc" onclick="discountSet()">할인 설정
<input type="radio" name="disc" onclick="discountSet()">할인 설정 안함<br>
<div id="disArea">
<input type="number" id="nd" min="1" max="100" onkeyup="disKeyup(this.value)">% 할인
</div>
<input type="hidden" id="discount" name="discount">
</td>
</tr>
참고 )
할인율 입력 텍스트 박스 말고 input type=hidden
으로 하나 더 만들어서 파라미터를 넘기는 건 할인 설정 안함
버튼 클릭 시에는 할인율 입력창을 보이지 않게 하기 위함임.
만약, 위와 같이 입력창을 보이지 않게 하는 기능은 필요 없다면 밑의 자바스크립트 코드 부분에서 display='none'
과 display='inline'
속성은 제거 가능
대신 value=0
으로만 해둘 경우 변경이 가능하기 때문에 readonly
속성을 추가하는 것을 추천!
그런데 이렇게 하면 할인 설정
버튼 클릭 시에는 readonly
속성 없애고 value
값도 다시 적을 수 있도록 만들어줘야 함!
function discountSet() {
if(document.proRegi.disc[0].checked){
document.getElementById("nd").readOnly = false;
document.getElementById("nd").value = "";
}else {
document.getElementById("nd").readOnly = true;
document.getElementById("nd").value = 0;
}
}
⭐ javascript
function discountSet() {
if(document.proRegi.disc[0].checked){
// 라디오버튼 값을 배열로 받아옴
document.getElementById("disArea").style.display = 'inline';
}else {
document.getElementById("disArea").style.display = 'none';
document.getElementById("discount").value = 0;
// 할인 설정 안함 버튼 클릭 시 value 값 0으로 설정
}
}