【问题标题】:p:commandButton execution order of eventsp:commandButton 事件的执行顺序
【发布时间】:2017-10-12 14:44:49
【问题描述】:

我正在使用 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.) 在 backing bean 上执行 actionListener 方法来保存一个客户;

2.) 使用在步骤 (1) 中保存的客户 ID 更新表单字段 saveCustomerId。 actionListener方法在保存成功后生成一个customer Id,存储为bean属性;

3.) 执行 Java Script 方法 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;
    }
}

【问题讨论】:

  • 如果你删除type="submit"会怎样
  • @Kukeltje 当我删除 type = "submit" 我仍然遇到同样的问题

标签: javascript ajax primefaces jsf-2


【解决方案1】:

我会在这里提出一个解决方法,因为我无法找到解决方案。 我们没有在前端更新 customerId,而是将其作为会话属性放在 HttpSession 中。

然后,在处理文件上传的 UploadServlet 中,我们读取该属性并将图像保存在该 customerId 下。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-01
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    • 2012-06-27
    相关资源
    最近更新 更多