我正在开发一个 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>