JSP 게시판
지금 현재 밑의 그림과 같이 검색박스 구현까지 만들어놓은 블로그 지만
하기 바뻐서 지금이라도 천천히 블로그에 글을 꾸준히 올릴려고 한다!

1) 검색시, 검색폼에 검색타입코드가 유지
검색박스 구현까진 좋지만 검색하고 나서 검색폼에 검색타입코드(제목,내용,제목+내용이 변함없도록)가 유지하도록 만들어보자.
<script>
if ( '${param.searchKeywordTypeCode}'.trim().length > 0 ) {
$('.section-article-write select[name="searchKeywordTypeCode"]').val('${param.searchKeywordTypeCode}');
}
</script>
이렇게 rq를 이용하여 검색폼에 검색타입코드를 유지하는 코드를 입력한다.
이렇게 코드를 입력했는데 검색타입코드가 유지가 안되는 이유는 ?..
중요한 제이쿼리를 불러오지 않았기 때문에 !
<!-- 제이쿼리 불러오기 -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
어딜가든 link나 src를 불러오는 건 head에 저장해놓자!
2) Rq 변수를 어디서든 쓸 수 있도록 !
검색타입코드를 유지하도록 하였지만 사실 코드가 너무 길고 개발자들이 저런 코드는 더럽다(?)라고 생각한다.그러기 때문에 rq를 이용하여 코드를 이쁘게 사용해보자
파라미터를 맵 형태로 뽑아서 사용하기.
public Map<String, Object> getParamMap() {
Map<String, Object> params = new HashMap<>();
Enumeration<String> parameterNames = req.getParameterNames();
while (parameterNames.hasMoreElements()) {
String paramName = parameterNames.nextElement();
Object paramValue = req.getParameter(paramName);
params.put(paramName, paramValue);
}
return params;
}
public String getParamMapJsonStr() {
return Ut.toJson(getParamMap(), "");
}
또한 이 코드도 추가하자
<script>
const rqParams = ${rq.paramMapJsonStr};
</script>
위의 형태는 한마디로 맵형태로 정리한다는 뜻이다! 이게 대체 무슨 의미가 있을까 ?
-> 우리가 만들었던 Rq코드를 써서 Rq코드가 그걸 받아 자바스크립트로 번역한다.
그러나 아직 나는 Rq의 대해 감이 안오기 때문에 다음편은 Rq의 대해 정리하는 편을 가져오겠다.
Rq를 추가함으로써 1)번의 코드도 변화해야한다.
EL법이 사라지고 간결하게 쓸 수 있다.
if ( rqParams.searchKeywordTypeCode.trim().length > 0 ) {
$('.section-article-write select[name="searchKeywordTypeCode"]').val(rqParams.searchKeywordTypeCode);
또한 RqBaseTypeAttrMapJsonStr 자바스크립트 변수를 어디서든 쓸 수 있도록 사용하자!
Rq함수
private Map<String, Object> getBaseTypeAttrMap() {
Map<String, Object> attrs = new HashMap<>();
Enumeration<String> attrNames = req.getAttributeNames();
while (attrNames.hasMoreElements()) {
String attrName = attrNames.nextElement();
Object attrValue = req.getAttribute(attrName);
if ( attrName.equals("rq") ) {
continue;
}
if ( Ut.isBaseType(attrValue) == false ) {
continue;
}
attrs.put(attrName, attrValue);
}
return attrs;
}
public String getBaseTypeAttrMapJsonStr() {
return Ut.toJson(getBaseTypeAttrMap(), "");
}
util 함수 추가
private static final Map<Class<?>, Class<?>> WRAPPER_TYPE_MAP;
static {
WRAPPER_TYPE_MAP = new HashMap<Class<?>, Class<?>>(16);
WRAPPER_TYPE_MAP.put(Integer.class, int.class);
WRAPPER_TYPE_MAP.put(Byte.class, byte.class);
WRAPPER_TYPE_MAP.put(Character.class, char.class);
WRAPPER_TYPE_MAP.put(Boolean.class, boolean.class);
WRAPPER_TYPE_MAP.put(Double.class, double.class);
WRAPPER_TYPE_MAP.put(Float.class, float.class);
WRAPPER_TYPE_MAP.put(Long.class, long.class);
WRAPPER_TYPE_MAP.put(Short.class, short.class);
WRAPPER_TYPE_MAP.put(Void.class, void.class);
}
public static boolean isPrimitiveType(Object source) {
return WRAPPER_TYPE_MAP.containsKey(source.getClass());
}
public static boolean isBaseType(Object source) {
if ( isPrimitiveType(source) ) {
return true;
}
if ( source instanceof String ) {
return true;
}
return false;
}
사실 이 코드에 대해 너무 어렵다... 그러니 Rq 에 대해 다음에 꼭 알아오도록 하겠음..
'공부기록' 카테고리의 다른 글
| 2021-07-23,공부기록(1) (0) | 2021.07.23 |
|---|---|
| 2021-07-21 공부기록 (0) | 2021.07.21 |
| 2021-06-16 까지의 공부 내용들 (0) | 2021.06.17 |
| 2021-06-08까지의 공부기록 (0) | 2021.06.09 |
| 2021-05-30 (0) | 2021.06.01 |