관리자 지방문화원 등록/수정에 구.군(AREA_SUB_CODE) 선택 기능 추가
- lclttRegist.jsp: 시.도 select 옆에 구.군 select 추가, /lcltt/selectAreaSubCodeListAjax.do 연동, 필수값 검증, 주소검색 콜백에서 sggNm 일치 구.군 자동선택 - LclttServiceImpl.java: insert/updateLcltt에서 폼의 areaSubCode 명시값을 우선 사용하고 비어있을 때만 주소 텍스트 추정을 setAreaSubCodeByAdres() 폴백으로 분리, null/배열 방어코드 추가 (기존 주소파싱 추정의 ArrayIndexOutOfBounds/NPE로 저장 실패하던 "시스템 에러" 해소) - LclttDAO.xml: selectLclttDetail에 A.AREA_SUB_CODE 추가(수정화면 진입 시 기존값 표시) 운영(webapps/kccf)에 개별 파일(class/jsp/xml)로 반영 + Tomcat 재시작 완료. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
603ef27a6f
commit
5ea8d4fdb6
@ -30,16 +30,8 @@ public class LclttServiceImpl implements LclttService{
|
||||
|
||||
@Override
|
||||
public int insertLcltt(LclttVO vo) {
|
||||
String[] adresArray = vo.getAdres1().split("\\s");
|
||||
|
||||
CmmDetailCodeVO cmmDetailCodeVO = new CmmDetailCodeVO();
|
||||
cmmDetailCodeVO.setAditAtrbInfoValue1(vo.getAreaCode());
|
||||
List<CmmDetailCodeVO> codeList = lclttDAO.selectAreaSubCodeListAjax(cmmDetailCodeVO);
|
||||
|
||||
for(int i = 0; i < codeList.size(); i++) {
|
||||
if(codeList.get(i).getDetailCodeNm().equals(adresArray[1])) {
|
||||
vo.setAreaSubCode(codeList.get(i).getDetailCode());
|
||||
}
|
||||
if(vo.getAreaSubCode() == null || vo.getAreaSubCode().trim().isEmpty()) {
|
||||
setAreaSubCodeByAdres(vo);
|
||||
}
|
||||
|
||||
return lclttDAO.insertLcltt(vo);
|
||||
@ -52,20 +44,46 @@ public class LclttServiceImpl implements LclttService{
|
||||
|
||||
@Override
|
||||
public int updateLcltt(LclttVO vo) {
|
||||
if(vo.getAreaSubCode() == null || vo.getAreaSubCode().trim().isEmpty()) {
|
||||
setAreaSubCodeByAdres(vo);
|
||||
}
|
||||
|
||||
String[] adresArray = vo.getAdres1().split("\\s");
|
||||
return lclttDAO.updateLcltt(vo);
|
||||
}
|
||||
|
||||
/**
|
||||
* 등록/수정 화면에서 구.군(areaSubCode)이 명시적으로 전달되지 않은 경우에 한해
|
||||
* 주소1(adres1)의 두 번째 단어(구.군명 추정)를 AREA_SUB_CODE 목록과 매칭하여
|
||||
* vo에 areaSubCode를 세팅하는 하위 호환용 폴백 로직이다.
|
||||
* 예외 없이 매칭 실패 시 조용히 건너뛴다.
|
||||
*/
|
||||
private void setAreaSubCodeByAdres(LclttVO vo) {
|
||||
if(vo.getAdres1() == null || vo.getAdres1().trim().isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
String[] adresArray = vo.getAdres1().trim().split("\\s+");
|
||||
|
||||
if(adresArray.length < 2) {
|
||||
return;
|
||||
}
|
||||
|
||||
String adresGuGun = adresArray[1];
|
||||
|
||||
CmmDetailCodeVO cmmDetailCodeVO = new CmmDetailCodeVO();
|
||||
cmmDetailCodeVO.setAditAtrbInfoValue1(vo.getAreaCode());
|
||||
List<CmmDetailCodeVO> codeList = lclttDAO.selectAreaSubCodeListAjax(cmmDetailCodeVO);
|
||||
|
||||
for(int i = 0; i < codeList.size(); i++) {
|
||||
if(codeList.get(i).getDetailCodeNm().equals(adresArray[1])) {
|
||||
vo.setAreaSubCode(codeList.get(i).getDetailCode());
|
||||
}
|
||||
if(codeList == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
return lclttDAO.updateLcltt(vo);
|
||||
for(int i = 0; i < codeList.size(); i++) {
|
||||
if(adresGuGun.equals(codeList.get(i).getDetailCodeNm())) {
|
||||
vo.setAreaSubCode(codeList.get(i).getDetailCode());
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -101,6 +101,7 @@
|
||||
A.LCLTT_ID ,
|
||||
A.LCLTT_NM ,
|
||||
A.AREA_CODE ,
|
||||
A.AREA_SUB_CODE ,
|
||||
A.ADRES1 ,
|
||||
A.ADRES2 ,
|
||||
A.ADRES1 || ' ' || A.ADRES2 AS ADRES ,
|
||||
|
||||
@ -47,6 +47,15 @@
|
||||
</c:forEach>
|
||||
</div>
|
||||
</td>
|
||||
<th>
|
||||
<label class="requiredText">구.군</label>
|
||||
</th>
|
||||
<td>
|
||||
<div class="row-df">
|
||||
<input type="hidden" id="hiddenAreaSubCode" name="hiddenAreaSubCode" value="${lclttVO.areaSubCode }" />
|
||||
<select class="form-control form-control-sm" id="areaSubCode" name="areaSubCode"></select>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>
|
||||
@ -207,13 +216,45 @@ $(document).ready(function() {
|
||||
$('#useYnN').prop("checked", true);
|
||||
}
|
||||
|
||||
if($('#hiddenAreaCode').val() != null || $('#hiddenAreaCode').val() != ''){
|
||||
if($('#hiddenAreaCode').val() != null && $('#hiddenAreaCode').val() != ''){
|
||||
$('form#insertForm select[name=areaCode]').val($('#hiddenAreaCode').val()).prop('selected', true);
|
||||
}
|
||||
|
||||
fnAreaSubCodeList($('#areaCode').val(), $('#hiddenAreaSubCode').val());
|
||||
|
||||
});
|
||||
|
||||
$('#areaCode').on('change', function(){
|
||||
fnAreaSubCodeList($(this).val(), '');
|
||||
});
|
||||
|
||||
function fnAreaSubCodeList(areaCode, selectedAreaSubCode){
|
||||
|
||||
$('#areaSubCode option').remove();
|
||||
|
||||
if(areaCode == null || areaCode == ''){
|
||||
return;
|
||||
}
|
||||
|
||||
$.ajax({
|
||||
url: "/lcltt/selectAreaSubCodeListAjax.do",
|
||||
type: "POST",
|
||||
data: {"aditAtrbInfoValue1" : areaCode},
|
||||
success: function(data){
|
||||
$('#areaSubCode').append('<option value="">선택</option>');
|
||||
for(var i=0; i<data.areaSubCodeList.length; i++){
|
||||
$('#areaSubCode').append('<option value="'+ data.areaSubCodeList[i].detailCode +'">'+ data.areaSubCodeList[i].detailCodeNm +'</option>');
|
||||
}
|
||||
if(selectedAreaSubCode != null && selectedAreaSubCode != ''){
|
||||
$('#areaSubCode').val(selectedAreaSubCode).prop('selected', true);
|
||||
}
|
||||
},
|
||||
error: function(){
|
||||
//전송에 실패하면 실행될 코드;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function fnLclttDelete(){
|
||||
var conf = confirm("정말로 삭제 하시겠습니까?");
|
||||
if(conf){
|
||||
@ -237,6 +278,12 @@ function fnLclttSave(){
|
||||
return false;
|
||||
}
|
||||
|
||||
if($('#areaSubCode').val() == null || $('#areaSubCode').val() == ''){
|
||||
alert('구.군을 선택해 주세요.');
|
||||
$('#areaSubCode').focus();
|
||||
return false;
|
||||
}
|
||||
|
||||
if($('#adres1').val() == null || $('#adres1').val() == ''){
|
||||
alert('주소를 입력해 주세요.');
|
||||
$('#adres1').focus();
|
||||
@ -280,6 +327,14 @@ function jusoCallBack(roadFullAddr,roadAddrPart1,addrDetail,roadAddrPart2,engAdd
|
||||
$('#adres1').val(roadAddrPart1);
|
||||
$('#adres2').val(addrDetail+roadAddrPart2);
|
||||
|
||||
// 주소 검색 결과의 시군구명(sggNm)과 일치하는 구.군을 자동 선택한다.
|
||||
if(sggNm != null && sggNm != ''){
|
||||
$('#areaSubCode option').each(function(){
|
||||
if($(this).text() == sggNm){
|
||||
$(this).prop('selected', true);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function fnList(){
|
||||
|
||||
Loading…
Reference in New Issue
Block a user