1221 개발일지

Yesol Lee·2021년 12월 21일
0

개발일지 - 2021

목록 보기
12/20
post-thumbnail

오늘 한 일


오늘 드디어 저번주부터 문제였던 부분을 해결하고 출장정보 + 출장비용 정보 동시에 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>로 받아 출장정보 안에 저장해야 했다.

문제 원인(예상)

sql resultType참고블로그

에러: 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에서 돌려보니 테이블 명에 오타가 있었다.

profile
문서화를 좋아하는 개발자

0개의 댓글