연어는 못참아
911
2021-04-05 00:17:45
6
314

스프링) vo를 담은 arraylist 형태를 다시 ajax로 controller에 보낼수 있을까요?ㅜㅜ


안녕하세요. 스프링 sts, 5.0.6을 사용하고 있는데요. (스프링 부트 아닙니다!! )


controller에서  jsp 로 2개의 서로 다른 arrayLIst<vo> 형태로 보낸 값을

jsp에서 보여준 후

다시 그 서로 다른 2개의 arraylist<vo> 를 controller로 보내는 방법이 있을까요? (첫번째 controller와 

두번쨰 controller는 서로 다릅니다. 첫번째는 jsp로 보내는 용도, 두번쨰는 DB저장용 입니다.)

 ㅠㅠ

오늘 하루종일 구글링 했는데 안나오네요.. 그나마 비슷한것은

ajax json배열 형태로 보내는 것 같아서

ArrayList<pVO> List1 = (ArrayList<PVO>)request.getAttribute("List1");

ArrayList<mVO>List2 = (ArrayList<mVO>)request.getAttribute("List2");


$('#bt_register').click(function(){

var List1 =List1;

var List2 = List2;

var param = { 

"List1" : JSON.stringify(List1) ,

"List2" : JSON.stringify(List2)

    };

$.ajax({

    url: "/insertList.do",

    type: "POST",

    traditional : true,

    dataType: "json",

    data: param,

    success: function(data){

    alert("ok");

    },

    error : function(request, status, error){

    alert("no");

    }

});   

});


이케하고 컨트롤러에서 


@PostMapping(value="/insertList.do")

@ResponseBody

public String insertList(@RequestParam Map<String, Object> param){

//Map<String, Object> result = new HashMap<>();

System.out.println("pLIst : " + param.get("pList"));

System.out.println("charXY : " + param.get("charXY"));

   }

검색하니 이렇게 쓰길래 따라썼는데 리스트들이 null값이 나옵니다.

저는 리스트 안에 있는 vo에 들어있는 값들을 받아다가 DB에 저장하고 싶습니다.

ㅠㅠ,, 혹시 조언 좀 부탁드려도 될까요?



0
  • 답변 6

  • jodheeee
    31
    2021-04-05 10:07:23

    받는 controller 에서 @RequestBody 로 바꿔보세요.

  • 연어는 못참아
    911
    2021-04-05 10:40:02

    @RequestParam  자리에 @RequestBody를 쓰니 지원하지 않은 미디어 양식?이라는 오류가 뜹니다. ㅠㅠ흑흑...

  • 파이리v
    269
    2021-04-05 10:47:27

    ajax에 contentType을 아래와 같이 추가해보세요

    contentType: 'application/json'

  • 연어는 못참아
    911
    2021-04-05 11:03:24 작성 2021-04-05 11:03:33 수정됨

    contentType: 'application/json' 이것도 해보았습니다. ㅜ,ㅜ 흑흑

  • 넘추운우리집
    44
    2021-04-06 15:20:52 작성 2021-04-06 15:21:11 수정됨

    이런 방법도 있긴한데  도움이 되실지 ..


    
    public class MultiNoticeVO {
    	private List<NoticeVO> target_notice;
    
    	public List<NoticeVO> getTarget_notice() {
    		return target_notice;
    	}
    
    	public void setTarget_notice(List<NoticeVO> target_notice) {
    		this.target_notice = target_notice;
    	}
    }
    


    이렇게 VO를 list로 가지는 객체를 만들고


    public String exapmle(
    				MultiNoticeVO multinotice
    			) {
    
    		List<NoticeVO> noticelst = multinotice.getTarget_notice();
    		
    		return  " ";
    	}


    컨트롤러에서는 이렇게 받고


    html 태그의 name 속성을 

    <input  type="text" name=" target_notice[idx].id "> 
    <input  type="text" name=" target_notice[idx].name "> 
    <input  type="text" name=" target_notice[idx].address "> 


     이런식으로 쓰면 받아지기는  하더라구요 .

    작은 도움이나 참고라도  되셨길 ..


  • 연어는 못참아
    911
    2021-04-11 09:28:33

    우엉 다들 도와주셔서 감사합니다. ㅠㅠ 제가 아직 부족해서

    해결을 못해서 그냥 

    ajax를 for문 돌려서 노가다로 했는데 그래도 에러가 떴습니다.

    해결법 찾으면 올리겠습니다.

  • 로그인을 하시면 답변을 등록할 수 있습니다.