본문 바로가기

javascript/w2ui

w2ui recid:undefined recid가 null 일 때

w2ui 라이브러리를 사용중인데, JAVA에서 값을 조회해서 js로 다시 반환할 때, List<Map<String, Object>>  이렇게 만들어준 데이터의 모양이었다.

 

 [
{REG_DT=2023-06-15 12:00:00, SPOT_ID=CS000001, SPOT_NM=출고장, IP=236.258.459.126, MDFCN_DT=2023-06-15 17:00:00},
{REG_DT=2023-06-15 16:21:33, SPOT_ID=CS0000022, SPOT_NM=nameName, IP=123.123.123.123}

]

뭐 이런 모양의 데이터.....


js로 받아서 w2ui에서 이렇게 넣어줬는데,

w2ui["vInfoGrid"].records = JSON.parse(data.list);


w2ui의 특성상 recid가 필요하다.

w2ui 그리드에 표현은 됐지만... rowClick을 하려는데 recid값이 없어서 행을 불러오지 못했다. 내가 만들어낸 데이터에는 recid가 없으니...... 각각의 데이터를 수정하기 위한 고유의 값으로 recid가 없는 상태였다.


해결방법은 recid가 들어간 데이터로 만들어 줘야 한다. 자바에서 하든 js에서 하든 작업자 마음이겠지만... 누군가가 만들어놓은 자바 메소드를 나는 활용했다.


이 메소드를 불러다가 사용하면 된다.

public static String injectionRecidData(List<Map<String, Object>> list) {
		
		String recidRow = "[";
		
		for(int i = 0; i < list.size(); i++){
			Map<String, Object> map = list.get(i);
			
			recidRow +=  (recidRow.equals("[") ? "" : ", " ) + "{ \"recid\":" + (i + 1);
			
			for(String key : map.keySet())
				recidRow += ", \"" + key + "\": \"" + map.get(key) + "\"";
			
			recidRow += "}";
		}// END for
		
		recidRow += "]";
		return recidRow;
	}

이렇게 메소드를 w2uiGrid 클래스를 만들고 그 안에 메소드를 만들어 줬고,  사용은 아래 코드처럼 list를 injectionRecidData 메소드안에 매개변수러 넣어서 recid가 들어간 데이터로 만들어줌.

private ModelAndView mv = new ModelAndView(); 
mv.addObject("list", w2uiGrid.injectionRecidData(list));

injectionRecidData 메소드 반환 타입이  String이기 때문에 js에서는 값을 받아다가 w2ui 그리드에 넣을 때, JSON.parse를 해줌.

w2ui["vInfoGrid"].records = JSON.parse(data.list);
w2ui["vInfoGrid"].refresh();

 

다음에 내가 잘 알아 볼 수 있기를...

728x90
300x250