提交值后,一旦xhtml页面上的选项卡(primefaces)关闭,我将重新打开一个新选项卡,该选项卡选择旧值仍然存在的相同bean。我想使用默认值(后备Bean的新实例)打开一个新选项卡。
XHTML页面
<h:form>
<p:layout style="min-width:400px;min-height:700px" >
<p:layoutUnit position="west" style="min-width:200px;min-height:50px">
<ui:include src="Menu.xhtml" />
</p:layoutUnit>
<p:layoutUnit position="center" >
<p style="text-align:center">Welcome</p>
<p:tabView dynamic="false" widgetVar="tabView">
<p:ajax event="tabClose" listener="#{requestCalculation.onTabClosed}"/>
<c:forEach items="#{requestCalculation.formTabs}" var="listItem">
<p:tab title="#{listItem.formTitle}" closable="true" >
<ui:include src="#{listItem.formPage}" />
</p:tab>
</c:forEach>
</p:tabView>
<h:panelGrid columns="2">
<h:commandButton value="Calculate" action = "#{requestCalculation.calculate}"/>
<h:commandButton value="Reset" action = "#{requestCalculation.resetPage}"/>
</h:panelGrid>
</p:layoutUnit>
</p:layout>
</h:form>
菜豆
公共字符串loadForm(TcsBase loadForm){
id = loadForm.getId();
ViewTabs tab = new ViewTabs();
tab.setFormTitle("Form".concat(id));
tab.setFormPage("Form".concat(id).concat(".xhtml"));
formTabs.add(tab);
calcReq.getFormCollection().add(loadForm);
System.out.println(loadForm.getId());
return "Main";
}
public void onTabClosed(TabCloseEvent e){
TabView tabView = (TabView) e.getComponent();
int closingTabIndex = tabView.getChildren().indexOf(e.getTab());
removeForm(closingTabIndex);
}
public void removeForm(int index){
calcReq.getFormCollection().remove(index);
formTabs.remove(index);
}
由于Bean似乎包含视图范围的数据(只要在同一浏览器窗口/选项卡中进行回退,该视图范围就存在),则应使其成为@ViewScoped
,而不是@SessionScoped
。这样,您也无需弄乱手动创建和销毁bean。只需将bean放在正确的范围内就可以了。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句