一次点击两次调用的方法

时间:2013-09-23 09:15:29

标签: jsf

我在前面使用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中使用一次。

0 个答案:

没有答案