我正在开发一个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>
答案 0 :(得分:0)
我找到了办法。但是我不能破坏视图结构的托管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;
}