我在应用程序的前端使用 JSF,在后端使用休眠。问题是有一种方法可以将记录保存在数据库(Oracle 11g)中,它从用户界面“单击时”调用,但似乎一次单击就运行了两次而不是一次。虽然不是每次。
我在这里分享该方法的代码:
MedOpd med = new MedOpd();
med.setStaff(staff);
med.setNotes(this.notes);
med.setOpdDate(ICMSUtils.getCurrentDateSQL());
med.setMedPatient(medPat);
HashMap dataMap = new HashMap();
HashMap dataMap2 = new HashMap();
dataMap.put(APP_OBJECT.MED, med);
dataMap2 = handleDoctorProcessorLocal.processMedicineProcessor(
dataMap, APP_ACTIONS.SAVE);
String result = dataMap2.get(APP_VARIABLES.RESULT).toString();
if(result.equals(RESULTS.SUCCESS))
{
mo = (MedOpd) dataMap2.get(APP_OBJECT.MEDOPD);
for (int i = 0; i < opdMedicineList.size(); i++)
{
MedMedicines mom2 = (MedMedicines) opdMedicineList.get(i);
mom2.setMedOpd(mo);
mom2.setMiName(mom2.getMedItem().getMiName());
mom2.setMiCode(mom2.getMedItem().getMiCode());
mom2.setIssued("P");
dataMap.put(APP_OBJECT.MEDOPDMEDICINE, mom2);
dataMap = handleDoctorProcessorLocal.
processOpdDoctorProcessor(
dataMap, APP_ACTIONS.SAVE+"MEDMEDICINE");
}
}
如您所见,它是我保存在数据库中的主/详细记录,代码运行良好,但有时,该方法单击即可保存两条相同的记录,并且它们的详细信息也将被复制。我还想在这里分享为同一记录生成的数据库 ID:
主表 ID:1010 详细表记录: 1. DET_ID=2010, MAS_ID=1010 2. DET_ID=2012, MAS_ID=1010 2. DET_ID=2015, MAS_ID=1010 主表 ID : 1011 详细表记录: 1. DET_ID=2011, MAS_ID=1011 2. DET_ID=2013, MAS_ID=1011 2. DET_ID=2014, MAS_ID=1011
请注意,我没有在我的应用程序中使用线程,但是这个页面一次被多个用户使用,这个类中根本没有静态字段或方法..
这是jsp代码:
<h:panelGrid columns="2" style="width:20%; margin:10px 50px 10px 80px;">
<ajax:commandButton id="save1" value="Next" action="#{opdManager.saveMedicine2}" reRender="patientPanel" />
</h:panelGrid>
整个jsp页面非常复杂,所以我只分享调用该方法的Button代码。“saveMedicine2”方法在整个jsp中只使用一次。