2017-10-12 83 views
0

的的commandButton執行順序:號碼:我使用PrimeFaces 6.0組件事件

<p:commandButton type="submit" value="Create Customer" 
    icon="ui-icon-check" 
    actionListener="#{newCustomerBean.saveNewCustomer}" 
    update = "@form" 
    oncomplete="ajaxUploadFile();"/> 

<p:inputText id="saveCustomerId" value ="#{newCustomerBean.savedKundeId}"/> 

,我想和他們執行的操作順序如下:

1)執行的ActionListener方法上支持bean來保存客戶;

2.)使用在步驟(1)中保存的客戶的ID更新表單字段saveCustomerId。 actionListener方法在成功保存並且存儲爲bean屬性後生成客戶ID;

3)執行Java腳本方法ajaxUploadFile()

根據鏈路

Execution order of events when pressing PrimeFaces p:commandButton

這個順序應如我想象的。

然而,在現實中,該方法

ajaxUploadFile()

之前用ID saveCustomerId輸入字段被更新調用。

你能幫助我得到正確的序列嗎?

下面是支持bean:

@ManagedBean 
@ViewScoped 
public class NewCustomerBean implements Serializable { 


    public enum KundeTyp { 

     TYP_NATPERS("Nat. Person"), TYP_FIRMA("Firma"); 

     private String value; 

     private KundeTyp(String value) { 
      this.value = value; 
     } 

     @Override 
     public String toString() { 
      return value; 
     } 

    } 

    private KundeTyp custmerType; 
    private Map<String, KundeTyp> custmerTypes; 

    private long savedKundeId; 

    @Inject 
    private KundeDBService kundeService; 

    private String vorname; 

    private String addresse; 

    private String steuerNummer; 

    private String kundeTyp = Integer.MIN_VALUE + ""; 

    @PostConstruct 
    public void init() { 
     custmerTypes = new HashMap<String, KundeTyp>(); 
     custmerTypes.put(KundeTyp.TYP_NATPERS.value, KundeTyp.TYP_NATPERS); 
     custmerTypes.put(KundeTyp.TYP_FIRMA.value, KundeTyp.TYP_FIRMA); 
    } 

    public KundeTyp getCustmerType() { 
     return custmerType; 
    } 

    public void setCustmerType(KundeTyp custmerType) { 
     this.custmerType = custmerType; 
    } 

    public Map<String, KundeTyp> getCustmerTypes() { 
     return custmerTypes; 
    } 

    public void setCustmerTypes(Map<String, KundeTyp> custmerTypes) { 
     this.custmerTypes = custmerTypes; 
    } 

    public String getVorname() { 
     return vorname; 
    } 

    public void setVorname(String vorname) { 
     this.vorname = vorname; 
    } 

    public String getAddresse() { 
     return addresse; 
    } 

    public void setAddresse(String addresse) { 
     this.addresse = addresse; 
    } 

    public String getSteuerNummer() { 
     return steuerNummer; 
    } 

    public void setSteuerNummer(String steuerNummer) { 
     this.steuerNummer = steuerNummer; 
    } 

    public String getKundeTyp() { 
     return kundeTyp; 
    } 

    public void setKundeTyp(String kundenTyp) { 
     this.kundeTyp = kundenTyp; 
    } 

    public String saveNewCustomer(ActionEvent e) { 


     Kunde neuerKunde = null; 

     switch (this.custmerType) { 
     case TYP_NATPERS: { 
      neuerKunde = new NatuerlichePerson(); 
      break; 
     } 

     case TYP_FIRMA: { 
      neuerKunde = new Firma(); 
      ((Firma) neuerKunde).setSteuerNummer("123456"); 
      break; 
     } 
     } 

     neuerKunde.setVorname(vorname); 
     neuerKunde.setAdresse(this.addresse); 

     try { 
      savedKundeId = kundeService.saveKunde(neuerKunde); 

     } catch (ServiceException se) { 

      FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error", 
        "Unable to save the new customer: " + se.getMessage())); 
     } 

     return null; 
    } 

    public long getSavedKundeId() { 
     return savedKundeId; 
    } 

    public void setSavedKundeId(long savedKundeId) { 
     this.savedKundeId = savedKundeId; 
    } 
} 
+1

如果在刪除type =「submit」時刪除'type =「submit」' – Kukeltje

+0

@Kukeltje會怎麼樣?我仍然遇到同樣的問題 –

回答

0

我想在這裏提出一個變通辦法,因爲我沒能找到解決的辦法。 我們沒有更新前端的customerId,而是將其作爲HttpSession中的會話屬性。

然後,在處理文件上傳的UploadServlet中,我們讀取此屬性並將圖像保存在此customerId下。