20221006_thu
지난시간 내용 정리
- html에서 java로 데이터를 넘길 때, java에서 데이터를 받는 방법
- 1) VO객체를 사용
- 2) Map 사용
: 클래스에 아이템브이오 가 있을 때,
itemName이라는 변수가 있다면
그리고 input태그로 데이터가 name값이 itemName으로 넘어온다면,
컨트롤러에있는 매개변수 커맨드객체 itemVO가 넘어간다.
public aaaa(ItemVO itemVO){
}
그런데 넘어갈때,내부적으로 vo에있는 setter값 호출되는것이기때문에 setItemName()이 넘어가는 것과 같다.
요청된 파라메터를 요청된map에다가 받아줘라
자동으로 받아주는것은vo객체 int나 string만 해당된다.
map은 자동으로받아주지 않기때문에 @requestParam 어노테이션 사용한것
@requestParam :매개변수와 html의 name값으로 동일한 데이터만 받아서 사용가능한데, 그렇지 않을 시에도 이름값이 달라도 데이터받아달라는 뜻이다.
public aaaa(@requestParam Map<String,String> map){
map.put("itemName","입력한값");
}
map에서는 이라고 되어있으면
map.put("itemName","입력한값"); 으로 되어있는 것과 같다.
: itemName이라는 name값이 map의 key값이고 input태그에 실제로 입력된 값이 map의 value값이 된다.
단, map으로 데이터를 받을 땐 중복된 key값으로는 하나의 값밖에 받지 못한다.
예를 들어
-> 1
-> 2
-> 3
이라고 입력했을 때
map.put("itemName","1");
map.put("itemName","2");
map.put("itemName","3");
위 map의 값에서 key값이 모두 중복되어있다.
그러므로 위 input태그에 입력한 실제 값들은 모두 넣을 수 없다.
단 마지막 가장 최근에 입력한 값만은 받아갈 수 있다.
그래서 itemName이라는 이름의 key에 해당하는 value값은 3 만 데이터로 받아갈수있다.
원래 아래의 코드에서는 String item 만있을 땐 name값이 item이라는 데이터는 없으므로 받을 수 가 없다.
그런데 아래처럼 어노테이션을 사용하여 name값 itemCode라는 값의 파라매터를 item이라는 문자열로 받도록 하자라는 뜻이기때문에 데이터 받아서 사용가능하다.
public aaaa(@requestParam(name="itemCode") String item){
print(item);
//출력결과 -> "1,2,3"
// 왜? 문자열 하나로 넣어주기때문에
}
반면, List를 이용할 경우 map과 달리 중복값도 데이터를 받기 때문에 모든 값이 들어간다.
public aaaa(@requestParam List item){
list.add("itmeName");//"1,2,3"
}
실습내용
- 현재 상품관리페이지이동시, 두가지 다른 부분을 클릭해도 동일하게 이동하는 경우가 있다.
: 사이드메뉴에서 상품관리 클릭 -> 상품관리페이지 이동
: 상품관리 페이지에서 검색 버튼 클릭시에도 -> 상품관리 페이지로 이동
-> 문제점 발생!- 검색버튼을 누르면 데이터를 가져가서 뿌려주지만, 사이드메뉴에서 상품관리 클릭 후, 페이지이동시에는 데이터를 못받아서 쿼리실행시, null값이 떠서 제대로 실행이 되지 않는다.
- 그래서 쿼리문에 반드시 날짜기능 if문 걸어줘야 한다.
<!-- parameterType="hashMap" : 생략가능 쿼리실행 빈값을 뭐로 채울래? -->
<select id="selectRegItemList" resultMap="item" >
SELECT
ITEM_CODE
,ITEM_NAME
,ITEM_PRICE
,to_char(REG_DATE, 'YYYY-MM-DD') REG_DATE
,ITEM_STOCK
,SHOP_ITEM.CATE_CODE
,CATE_NAME
,DECODE(ITEM_STATUS,'ON_SALE','판매중','매진') ITEM_STATUS
FROM SHOP_ITEM,ITEM_CATECGORY
WHERE SHOP_ITEM.CATE_CODE = ITEM_CATECGORY.CATE_CODE
<if test="cateCode != null and !cateCode.equals('') ">
AND SHOP_ITEM.CATE_CODE = #{cateCode}
</if>
<if test="itemName != null and !itemName.equals('')">
AND UPPER(ITEM_NAME) LIKE UPPER('%'||#{itemName}||'%')
</if>
<if test="itemStock != null and !itemStock.equals('')">
AND ITEM_STOCK <= #{itemStock}
</if>
<if test="fromDate != null and fromDate.equals('')">
AND TO_CHAR(REG_DATE,'YYYY-MM-DD') >= '#{fromDate}'
</if>
<if test="toDate != null and toDate.equals('')">
AND TO_CHAR(REG_DATE,'YYYY-MM-DD') <= '#{toDate}'
</if>
<if test="itemStatus != null and !itemStatus.equals('')">
AND ITEM_STATUS = #{itemStatus}
</if>
</select>