0

我正在开发一个 JSF 2.1 项目。我正在使用 primefaces 3.5 组件。有两个带 viewscoped 的 managedbean,WizardBean 和 CreateInputBean。它们用于向导组件(primefaces)。最后一点首先是向导,我单击一个按钮然后打开对话框。对话框中还有向导。这里使用 CreateInputBean 创建域对象的实例。在打开对话框时再次创建实例后,由于 CreateInputBean 是生命,所以有最后一个实例的信息。我想用 ViewScoped 销毁 CreateInputBean 而不转到另一个页面。

我尝试了这些,但它们不起作用。

@ManagedBean(name = "cbean")
@ViewScoped
public class CreateInputBean {

public void addUsage() {
    ...
    FacesContext.getCurrentInstance().getViewRoot().getViewMap().remove("#{cbean}");
      or
    FacesContext.getCurrentInstance().getViewRoot().getViewMap().remove("cbean");
} 
}

在此处输入图像描述

            <p:wizard flowListener="#{wizard.onFlowProcess}">
                <p:tab id="personal" title="Kullanıcı ile ilgili bilgiler">
                    ...
                </p:tab>
                <p:tab id="confirm" title="Kullanım Verileri">
                    <p:panel style="height: 600px;">
                        <p:dataTable id="liste" value="#{ubean.usages}" var="usage">
                            ...
                        </p:dataTable>
                        <p:commandButton value="Ekle" onclick="dlg.show();" type="button" />
                    </p:panel>
                    <p:dialog header="Usage Ekleme" widgetVar="dlg" showEffect="fold"
                        hideEffect="fold" height="600" width="600">
                        <p:wizard flowListener="#{cbean.onFlowProcess}">
                            <p:tab title="Servis Tipi">
                                ...
                            </p:tab>
                            <p:tab title="Kullanim Tipi">
                                ...
                            </p:tab>
                            <p:tab title="İşlem Süresi/Adedi/Miktarı">
                                <p:panel style="height: 500px; width: 500px;">
                                    <h:panelGrid columns="2">
                                        <p:outputLabel value="Term:" />
                                        <p:inputText value="#{cbean.term}" />
                                        <p:commandButton value="Save"
                                            actionListener="#{cbean.addUsage}" oncomplete="dlg.hide()"
                                            update="liste" />
                                    </h:panelGrid>
                                </p:panel>
                            </p:tab>
                        </p:wizard>
                    </p:dialog>
                </p:tab>
            </p:wizard>
4

1 回答 1

0

我想办法。但我不能破坏 viewscoped 托管 bean。我可以在对话框中获取第一个选项卡向导并清除向导中的字段。

<script type="text/javascript">  
                function resetWizard() {
                    wiz.loadStep(wiz.cfg.steps[0], true);
                }
     </script>

   ...........................................


 <p:wizard flowListener="#{cbean.onFlowProcess}" widgetVar="wiz">


.............


  <p:commandButton value="Save" actionListener="#{cbean.addUsage}" 
       oncomplete="dlg.hide(), resetWizard()" update="liste" />



 ..........


    public void addUsage(ActionEvent actionEvent) {
    selectedServis = modalService.getServis(selectedServisID);
    selectedKullanimTipi = modalService
            .getKullanimTipi(selectedKullanimTipiID);
    ubean.addUsage(new Call(ubean.getAbone(), selectedServis, term,
            selectedKullanimTipi));

    this.selectedServisID = 1;
    this.selectedKullanimTipiID  = 1 ;
    this.selectedKullanimTipi = null;
    this.selectedTarife = null;
    this.selectedServis = null;
    this.term = null;

}
于 2013-07-26T13:14:15.963 回答