이 학습에서는 회사 디렉토리 응용프로그램을 사용하여 새 직원 레코드를 추가합니다.
새 직원을 추가하기 위한 응용프로그램의 작동이 상당히 복잡하고 동적이므로 이 연습은 더 복잡해질 수 밖에 없고 일부 소스 코드는 수동으로 변경해야 합니다. 또한 이 연습에서는 데이터 오브젝트의 몇몇 고급 기능을 보여주고 사용자 필요에 맞도록 바인더 및 데이터 오브젝트를 사용할 수 있는 방법에 대한 창의적 예제를 제공합니다.
다음 목록은 응용프로그램의 필수 작동을 설명합니다.
샘플 웹 서비스는 사용 가능한 다음 직원 ID 번호로 채워지도록 공백의 새 직원 레코드를 제공하는 createNewFullEmployeeRecord 서비스를 제공합니다. 이 공백 레코드는 새 직원 정보로 채우고 다시 웹 서비스에 제출할 수 있습니다.
세부사항 필드와 갱신 단추는 모드를 전환해야 하므로(둘 다 갱신을 수행하고 새 직원을 작성하도록), 다른 시간에 다른 두 데이터 오브젝트에 바인드해야 합니다. 이 단계를 용이하게 하려면 기본 데이터 오브젝트 switchingDataObject를 추가하십시오. 이 기본 데이터 오브젝트를 사용하면 selectedEmployeeRecord 및 newEmployeeRecord 사이에 텍스트 필드에 대한 바인딩이 전환됩니다.
각 직원 세부사항 필드가 이미 selectedEmployeeRecord에 바인드되어 있어도 이들을 바로 switchingDataObject에 바인드할 수 있습니다. 필드를 바인드하고 나면 기존 직원 레코드를 수정하고 있는지 아니면 새 직원 레코드를 추가하고 있는지에 따라 필드의 데이터 오브젝트 사이를 동적으로 전환할 수 있습니다.
다음의 updateMode() 메소드는 모드 플래그가 새로 작성으로 설정되어 있는지 확인하고 그에 따라 응용프로그램 작동을 변경합니다. 기본적으로 isNewMode 부울 플래그는 false로 설정되므로 updateMode() 메소드는 직원 테이블 및 필터 필드를 사용 가능하게 하고, 갱신 단추의 텍스트를 "갱신"으로 설정합니다. isNewMode가 true로 설정되면 직원 테이블은 사용할 수 없게 되고 선택한 내용이 모두 지워집니다. 필터 필드를 사용할 수 없으며 갱신 단추의 텍스트는 "추가"로 설정됩니다.
private boolean isNewMode = false; private void updateMode() { if (isNewMode) { getEmployeesTable().clearSelection(); getEmployeesTable().setEnabled(false); getFilterField().setEditable(false); getUpdateCreateButton().setText("Add"); } else { getEmployeesTable().setEnabled(true); getFilterField().setEditable(true); getUpdateCreateButton().setText("Update"); } }
이 단계에서는 새로 작성 단추를 클릭할 경우의 이벤트 코드를 추가합니다. 이벤트는 switchingDataObject가 newEmployeeRecord 데이터 오브젝트를 사용하도록 통지하고 모드 플래그를 "새로 작성"으로 설정한 후 앞 단계에서 추가한 updateMode() 메소드를 실행합니다.
이전 학습에서는 웹 서비스에서 modifyEmployee 메소드를 사용하도록 갱신 단추를 프로그램했습니다. 이 조치는 SwingDataServiceAction으로 구현됩니다. SwingDataServiceAction 특성 중 하나가 서비스에 대한 인수로 작동하는 소스 오브젝트입니다. 수정 조치를 위한 소스 오브젝트는 현재 selectedEmployeeRecord로 설정되어 있습니다. 갱신 및 추가를 모두 제어하도록 단추를 프로그램하려면 단추 조치를 재구성하여 switchingDataObject를 modifyEmployee 서비스에 대한 인수로 사용해야 합니다.
갱신 단추를 클릭하고 웹 서비스에서 조치를 완료한 후, 기본 모드 및 작동으로 다시 이동할 수 있습니다. 이를 수행하려면 갱신 또는 추가를 수행한 후 모드를 갱신하고 테이블을 새로 고칠 단추 조치 바인더에 대한 이벤트 리스너를 추가하십시오.
modifyEmployeeAction.addActionBinderListener(new jve.generated.IActionBinder.ActionBinderListener() { public void afterActionPerformed(jve.generated.IActionBinder.ActionBinderEvent e) { if (isNewMode) { //Go back to using the selectedEmployeeRecord getSwitchingDataObject().setSourceObject(getSelectedEmployeeRecord()); //Revert out of new mode isNewMode = false; updateMode(); } // Refresh the table's data object getLightEmployeeRecordRows().refresh(); } public void beforeActionPerformed(jve.generated.IActionBinder.ActionBinderEvent e) {} });