본문 바로가기
java

form에서 받은 값을 controller로 전달하기

by Gyona 2023. 9. 27.

이번오류는 정말 오랜시간 해결되지 않았다.

코드 자체도 복잡하고 placeNm, firstPlace, secondPlace, thirdPlace 등이 다양하며

심지어 beforeplaceNm, beforeFirstPlace,,, 하나를 수정하는데 여러개의 변수가 생겼다.

 

💢이전에 안되던 코드

<td class="tit">부서명</td>
					<td class="textL">
						<form:input type="hidden" path="placeId" id="placeId" title="보관위치" />
						<input type="text" id="placeNm" class="form-control form-control-sm" style="width:92%;" readonly="readonly" value="<c:out value='${pcHardwareVO.firstPlace}'/> <c:out value='${pcHardwareVO.secondPlace}'/>  
						<c:out value='${pcHardwareVO.thirdPlace}'/>"/>
					  <a href="#LINK" onclick="javascript:fnTest()"><img src="<c:url value='/images/egovframework/com/cmm/icon/search.gif' />"width="20" height="20" align="middle" alt="새창" /></a>
						</td>

부서명을 설정할수 있는 form 이다. fnTest()를 실행하면

function fnTest(){
	var retVal;
    var url = "<c:url value='/PcAddHw2.do'/>";
    var varParam = new Object();
    var openParam = "dialogWidth:680px;dialogHeight:480px;scroll:yes;status:no;center:yes;resizable:yes;";
    retVal = window.open(url, '', openParam);
   if(retVal) {
	    document.getElementById("placeId").value = retVal.sIdx;
	    document.getElementById("placeNm").value = retVal.sName;
   
    }
}

여기함수가 실행되었고 PcAddHw2.do가 실행되었다.

 

pcAddHw2에서 값을 전달을 못하는건가 싶었지만 부서 코드가 변경되어서 그것은 아닌것 같았다.

 

컨트롤러도 수정을 해보았다. 

@RequestMapping(value="/updateHardware.do")
	public String updateHardware(PcHardwareVO pcHardwareVO, @ModelAttribute("searchVO") PcManagementDefaultVO searchVO, SessionStatus status, Model model, HttpServletRequest request) throws Exception
	{
		LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
		PcLogVO pcLogVO = new PcLogVO();
		
		searchVO.setHardwareId(pcHardwareVO.getHardwareId());
		List hardwareList = pcManagementService.selectPcHardwareList(searchVO);
		
		pcHardwareVO.setPurPrice(pcHardwareVO.getPurPrice().replaceAll(",",""));
		pcManagementService.updatePcHardware(pcHardwareVO);

		String hwState = request.getParameter("beforeHwState");
		String deadline = request.getParameter("beforeDeadline");
		String ip = request.getParameter("beforeIp");
		String purpose = request.getParameter("beforePurpose");
		String beforeSecondPlace = request.getParameter("beforeSecondPlace");
		String beforeThirdPlace = request.getParameter("beforeThirdPlace");
		String hwUserNm = request.getParameter("beforeHwUserNm");
		String secondPlace = request.getParameter("secondPlace");
		String thirdPlace = request.getParameter("thirdPlace");
		String placeNm = request.getParameter("secondPlace") + request.getParameter("thirdPlace");
        String placeNmSame = request.getParameter("secondPlace") + request.getParameter("thirdPlace");
        String beforePlaceNm = request.getParameter("beforeSecondPlace") + request.getParameter("beforeThirdPlace");

		
	
		if(hwState=="001"){hwState="활용";}
		if(hwState=="002"){hwState="장애";}
		if(hwState=="003"){hwState="예비";}
		if(hwState=="004"){hwState="불용";}
		if(hwState=="005"){hwState="폐기";}
		
		String afterHwState = pcHardwareVO.getHwState();
		String afterIp = pcHardwareVO.getIp();
		if(afterHwState.equals("001")==true){afterHwState="활용";}
		if(afterHwState.equals("002")==true){afterHwState="장애";}
		if(afterHwState.equals("003")==true){afterHwState="예비";}
		if(afterHwState.equals("004")==true){afterHwState="불용";}
		if(afterHwState.equals("005")==true){afterHwState="폐기";}
		
		//log
		pcLogVO.setUserId(loginVO.getId());
		pcLogVO.setHardwareId(pcHardwareVO.getHardwareId());
		
		
		if(hwState.equals(afterHwState)==false){
			pcLogVO.setMenuNm("장비관리");
			pcLogVO.setLogName("수정");
			pcLogVO.setSoftwareId("");
			pcLogVO.setLogContents("장비[ "+pcHardwareVO.getHardwareId()+" ] 상태 [ "+hwState+" ] → [ "+afterHwState+" ] 수정");
		    pcManagementService.insertPcLog(pcLogVO);
		}
		
		
					
		
		if(beforePlaceNm.equals(pcHardwareVO.getPlaceNm())==false){
			pcLogVO.setMenuNm("장비관리");
			pcLogVO.setLogName("수정");
			pcLogVO.setSoftwareId("");	
			pcLogVO.setLogContents("장비 [ " + pcHardwareVO.getHardwareId()+ " ] 부서 [ " + beforePlaceNm + " ] → [ " + placeNm + " ] 수정");
			pcManagementService.insertPcLog(pcLogVO);
		}	
		
	
		if(hwUserNm.equals(pcHardwareVO.getHwUserNm())==false){
			pcLogVO.setMenuNm("장비관리");
			pcLogVO.setLogName("수정");
			pcLogVO.setSoftwareId("");
			pcLogVO.setLogContents("장비 [ "+pcHardwareVO.getHardwareId()+" ] 사용자 [ "+hwUserNm+" ] → [ "+pcHardwareVO.getHwUserNm()+" ] 수정");
			pcManagementService.insertPcLog(pcLogVO);
		}	
		
		if(ip.equals(pcHardwareVO.getIp())==false){
			pcLogVO.setMenuNm("장비관리");
			pcLogVO.setLogName("수정");
			pcLogVO.setSoftwareId("");
			pcLogVO.setLogContents("장비[ "+pcHardwareVO.getHardwareId()+" ] IP [ "+ip+" ] → [ "+pcHardwareVO.getIp()+" ] 수정");
		    pcManagementService.insertPcLog(pcLogVO);
		}
		
		if(purpose.equals(pcHardwareVO.getPurpose())==false){
			pcLogVO.setMenuNm("장비관리");
			pcLogVO.setLogName("수정");
			pcLogVO.setSoftwareId("");
			pcLogVO.setLogContents("장비[ "+pcHardwareVO.getHardwareId()+" ] 사용용도 [ "+purpose+" ] → [ "+pcHardwareVO.getPurpose()+" ] 수정");
		    pcManagementService.insertPcLog(pcLogVO);
		}
		
		if(deadline.equals(pcHardwareVO.getDeadline())==false){
			pcLogVO.setMenuNm("장비관리");
			pcLogVO.setLogName("수정");
			pcLogVO.setSoftwareId("");
			pcLogVO.setLogContents("장비[ "+pcHardwareVO.getHardwareId()+" ] 회수예정일 [ "+deadline+" ] → [ "+pcHardwareVO.getDeadline()+" ] 수정");
		    pcManagementService.insertPcLog(pcLogVO);
		}
		
		
		/*else {
			status.setComplete();

		}*/
		status.setComplete();
		/*return "redirect:/pcAssetRegistP.do";*/
		return "forward:/PcAssetList.do";
		
	}

정말 열심히 삽질하다 해결되었다.

 

💙해결된 코드

function fn_save() {
    frm = document.getElementById("pcHardwareVO");
    var hwState = "";
    var secondPlace = "";
    var thirdPlace = "";
    var hwUserNm = "";
    var deadline = "";
    var ip = "";
    var purpose = "";

    <c:forEach var="assetList" items="${assetList}" varStatus="status">
        hwState = "<c:out value="${assetList.hwState}"/>";
        secondPlace = "<c:out value="${assetList.secondPlace}"/>";
        thirdPlace = "<c:out value="${assetList.thirdPlace}"/>";
        hwUserNm = "<c:out value="${assetList.hwUserNm}"/>";
        deadline = "<c:out value="${assetList.deadline}"/>";
        ip = "<c:out value="${assetList.ip}"/>";
        purpose = "<c:out value="${assetList.purpose}"/>"; 
    </c:forEach>
        
    frm.beforeHwState.value = hwState;
    frm.beforeIp.value = ip;
    frm.beforePurpose.value = purpose;
    frm.beforeSecondPlace.value = secondPlace;
    frm.beforeThirdPlace.value = thirdPlace;
    frm.beforeHwUserNm.value = hwUserNm;
    frm.beforeDeadline.value = deadline;

    var placeNmElement = document.getElementById("placeNm");
    var placeNmValue = placeNmElement.value;

    // secondPlace 설정
    var secondPlaceValue = placeNmValue; // 원하는 값으로 설정

    frm.secondPlace.value = secondPlaceValue;
    
    if (confirm("저장 하시겠습니까?")) {
        frm.action = "<c:url value='/updateHardware.do' />";
        frm.submit();
    }
}

form에 입력된 값을 javaScript 변수에 할당해주었다.

var placeNmElement = document.getElementById("placeNm"); // placeNm 요소 가져오기
var secondPlaceValue = placeNmElement.value; // secondPlace 값 가져오기

form 의 id는 placeNm이었고 secondPlace값을 가져올수있었다.

frm.secondPlace.value = secondPlaceValue;

그후에 위의 코드를 추가하여 완성하였다. 의문인건...thirdPlaceValue를 적용안해도 된다는거...ㅎ..

 

form에 입력된 값을 controller로 전달하여 로그를 남기는 코드였다.