我在前面使用JSF,在我的应用程序中使用后端的hibernate。问题是有一种方法将记录保存在数据库(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:
Master Table ID : 1010 Detail Table Records : 1. DET_ID=2010, MAS_ID=1010 2. DET_ID=2012, MAS_ID=1010 2. DET_ID=2015, MAS_ID=1010 Master Table ID : 1011 Detail Table Records : 1. DET_ID=2011, MAS_ID=1011 2. DET_ID=2013, MAS_ID=1011 2. DET_ID=2014, MAS_ID=1011
请注意我在我的应用程序中没有使用Threads,但此页面一次被多个用户使用,此类中根本没有静态字段或方法..
这是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中使用一次。