2017-10-12 6 views
0

J'utilise PrimeFaces 6.0 composants:p: commandButton ordre d'exécution des événements

<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}"/> 

et je veux exécuter la séquence d'actions avec eux:

1.) Execute la méthode actionListener sur la backing bean pour sauver un client;

2.) Mettez à jour le champ de formulaire saveCustomerId avec l'ID du client enregistré à l'étape (1). La méthode actionListener génère un identifiant client après l'enregistrement réussi et stocke en tant que propriété bean;

3.) Exécutez la méthode Java Script ajaxUploadFile()

Selon le lien

Execution order of events when pressing PrimeFaces p:commandButton

cette séquence est comme je l'ai imaginé.

Cependant, en réalité, le procédé

ajaxUploadFile()

est appelé avant la zone de saisie associée à l'identifiant saveCustomerId est mis à jour.

Pourriez-vous m'aider à obtenir la bonne séquence?

Voici le backing 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

et si vous supprimez 'type =" submit "' – Kukeltje

+0

@Kukeltje lorsque je supprime type = "soumettre" Je suis toujours le même problème –

Répondre

0

Je propose un travail ici, puisque je ne suis pas en mesure de trouver une solution. Au lieu de mettre à jour customerId sur le front-end, nous l'avons mis en tant qu'attribut de session dans HttpSession.

Ensuite, dans le SendServlet, qui gère le téléchargement du fichier, nous lisons cet attribut et enregistrons l'image sous ce customerId.