1221 개발일지
오늘 한 일
오늘 드디어 저번주부터 문제였던 부분을 해결하고 출장정보 + 출장비용 정보 동시에 CRUD 기능을 완료했다.
register3.jsp
1. update 시 작성일로 인한 sql에러
기존 오류
생성할 때는 input data없고 db에 입력할 때 now()로 생성되는 '작성일' 속성이 있는데, select할 때는 문제없으나 update 시 '작성일' 속성 input이 포함되어있자 sql 에러 발생
문제 원인
'작성일'은 update쿼리에 필요 없는 부분인데 input으로 보냈던 것이 문제였다.
해결
input을 없애고 table 안에 그냥 <c:out value>
로 값만 보여주었다.
2. 작성일 날짜 표시형식 변경
문제
now()로 생성한 값이다보니 초단위까지 표시됨. yyyy-mm-dd 형식으로 변경하는 코드 추가했다.
<c:if test="${registerFlag == 'modify'}">
<tr>
<fmt:formatDate var="createdDate" value="${btVO.createdAt}" pattern="yyyy-MM-dd"/>
<td class="tbtd_caption"><label for="createdAt">작성일</label></td>
<td class="tbtd_content">
<c:out value="${createdDate}"/>
</td>
</tr>
</c:if>
3. 출장비용 update에 필요한 정보 유지
기존 오류
update에 필요한 출장비용의 일련번호bt_exp_id
속성값이 register.jsp에서 controller로 전달되지 않음
문제 원인
'작성일'과 반대로 쿼리에 필요한 값을 input으로 넘겨주지 않아서 그런거였다.
해결
페이지 수정의 경우 input:hidden
을 사용하여 정보를 유지했다.
<c:if test="${registerFlag == 'modify'}">
<!-- 비용 정보 번호, bt_id값 저장 -->
<form:hidden path="btExpVOList[0].btExpId" readonly="true" />
<form:hidden path="btExpVOList[0].btId" readonly="true" />
</c:if>
sql.xml
1. resultType 변경
기존 오류
출장비용 여러 개를 list로 받을 때 insert에서는 index로 접근이 가능한데 select에서는 index로 접근이 불가능한 문제가 있었다. 현재 CRUD를 하나의 jsp파일에서 수행하기 때문에 반드시 둘 다 되는 방법을 찾아야 했다. 저번주부터 해결 못 한 문제가 이거다.
sql.xml에서 출장비용 리스트 select 부분을 만들 떄 출장정보 list select에서 resultType=egovMap으로 설정한 것을 따라했었다. 그런데 egovMap으로 받은 리스트는 resultList 속성으로 받아 jsp에서 바로 접근한 반면, 나는 출장비용 리스트를 List<BtExpVO>
로 받아 출장정보 안에 저장해야 했다.
문제 원인(예상)
에러: Error querying database. Cause: java.lang.UnsupportedOperationException
비용정보 리스트의 resultType을 list으로 줘봤다가 위의 에러가 발생했다. 찾아보니 list가 아니라 list의 데이터타입을 적어줘야 되는 거였다. 블로그 작성하신 분도 오래 고생하신 것 같은데 덕분에 나도 며칠만에 해결했다ㅠㅠ
<resultMap id="btExpVO" type="egovframework.example.sample.service.BtExpVO">
<result property="btExpId" column="bt_exp_id"/>
<result property="btId" column="bt_id"/>
<result property="expenseType" column="expense_type"/>
<result property="expenseDetail" column="expense_detail"/>
<result property="paymentMethod" column="payment_method"/>
<result property="price" column="price"/>
</resultMap>
...
<select id="selectBtExpList" parameterType="String" resultMap="btExpVO">
SELECT BT_EXP_ID, BT_ID, EXPENSE_TYPE, EXPENSE_DETAIL, PAYMENT_METHOD, PRICE FROM TBBTEXPENSES
WHERE BT_ID=#{btId}
</select>
2. sql 오타 수정
문제
jsp에서 controller로 값이 잘 넘어오는 것을 확인했는데 db 에러로 update, delete가 되지 않았다. 이제는 무조건 sql 쿼리의 문제라는 것을 알겠다.
해결
sql.xml의 sql을 복사해서 workbench에서 돌려보니 테이블 명에 오타가 있었다.
Author And Source
이 문제에 관하여(1221 개발일지), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@lee_yesol421/1221-개발일지저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)