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>로 받아 출장정보 안에 저장해야 했다.

문제 원인(예상)

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

좋은 웹페이지 즐겨찾기