뽀미의 개발노트

form 에 적힌 여러 정보를 list로 받아 controller로 한번에 보내기 본문

Trouble_Shooting

form 에 적힌 여러 정보를 list로 받아 controller로 한번에 보내기

산타는 뽀미 2023. 5. 24. 15:53

내가 하고싶은건 

이렇게 하나의 폼에 여러 정보를 입력하면 컨트롤러로 넘어가서 한줄 한줄이 각각 DB에 insert 되게 하고 싶은 거였음!

<참고한 블로그>

https://dotheright.tistory.com/226

 

뷰(form)에 입력한 많은 데이터를 List 타입으로 컨트롤러로 보내는 방법

1. 목표2. 기능 3. 소스코드 1. 목표 1. 개발환경 > Spring Boot 2.1.7, JDK 8 2. 뷰에서 많은 양의 데이터를 컨트롤러로 보내고자 한다. > 리스트 형태로 보낼 수 있다. 2. 기능 1. 리스트 타입으로 보내기 순

dotheright.tistory.com

https://mchch.tistory.com/80

 

[Spring] vo 여러개 전달하기. LIST<VO> vo를 list 로 넘기기 / 받기

JSP Form에서 VO가 여러개로, 즉 list로 넘기고 controller에서 받아야 하는 경우 List를 사용하면 됨 1. VO객체 BoardVo 클래스 안에 List를 선언하고 getter와 setter도 만들었음! public class BoardVo { private String boa

mchch.tistory.com

이 두개의 블로그를 참고해서 폼의 여러정보를 보낼수 있게 되었다!!


 

<Score.vo>

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Score {
	private int id;
	private int memberId;
	private int score;
	private int classId;
	private int relId;
	
}

<ScoreList.vo>

@Data
@NoArgsConstructor
@AllArgsConstructor
public class ScoreList {
	private List<Score> scorelist;
}

<score.jsp>

<form action="doWriteScoreArticle">
    <c:forEach var="member" items="${members }" varStatus="status">
        <tbody>
        <input type="hidden" name="scorelist[${status.index }].relId" value="${article.id }"/>
        <input type="hidden" name="scorelist[${status.index }].classId" value="${article.classId }"/>
        <input type="hidden" name="scorelist[${status.index }].memberId" value="${member.id }"/>
          <tr id="${status.count }">
            <th>
              <label>
                <input type="checkbox" class="checkbox" />
              </label>
            </th>
            <td>${member.name }</td>
            <td><input class="input input-bordered input-success w-full" type="text" name="scorelist[${status.index }].score"/></td>
            <td>
                <select name="classId" class="select select-success w-full max-w-xs">
                    <option value="">응시</option>
                    <option value="">미응시</option>
                </select>
            </td>
          </tr>
        </tbody>
    </c:forEach>
	<button class="btn btn-success mr-2">작성</button>
</form>

<controller>

	@RequestMapping("/project/article/doWriteScoreArticle")
	@ResponseBody
	public String doWriteScoreArticle(ScoreList scorelist) {
		
		List<Score> scoreList = scorelist.getScorelist();
		
		for(Score score : scoreList) {
			if(score != null) {
				scoreService.insertScore(score.getMemberId(), score.getScore(), score.getClassId(), score.getRelId());
			}
		}
		
		return Util.jsReplace("성적을 입력했습니다.", "scorelist");
	}

난 여기서 저 리스트로 받아온걸 scorelist(내가 클래스로 만든)에 넣고 나서 자꾸 그걸로 list<Score>를 꺼내 쓰려고 해서 안 됐었는데 scorelist는 객체고 그 안에 List<Score>가 있는 거기 때문에 내가 원하는 대로 꺼내쓸 수 없는 거였음!! 그래서 향상된 for문도 안 먹고 scorelist.size()도 안 되고 scorelist.length()도 안 먹었다ㅜㅠ

그래서 scoreList라는 새로운 변수에다가 scorelist 객체에서 scorelist라는 찐 리스트를 꺼내서 담아준 다음에 향상된 for문으로 하나씩 꺼내서 score에 담고 이제 쿼리문 날려서 DB에 score 하나씩 다 insert 해주면 되는 것이다!!!