我在tabview中有一个Hashmap,在第一个标签上有两个标签,用户可以看到他在第二个标签上选择的所有对象,他可以看到他可以选择的所有对象。这两者都是相同的Hashmap。
XHTML:
<p:tabView id="tabViewElement" style="margin-top: 5px;min-height: 50px;max-height: 300px;overflow-x: hidden;" dynamic="true" activeIndex="0">
<p:ajax event="tabChange" listener="#{Bean.onTabChangeElement}" update="tabViewElement:productConfs tabViewElement:cardsElements" />
<p:tab id="idTabElementView" title="Elements Sectionnes">
<h:inputText rendered="#{Bean.objectselected}" value="Aucun produit selectionné"/>
<p:dataTable id="productConfs" var="productConf" value="#{Bean.keyAsListForAllElement}" rendered="#{Bean.objectselected}">
<f:facet name="header">
<h:outputText value="ELEMENTS" />
</f:facet>
<p:column headerText="" rendered="#{Bean.listAllElement[productConf]}">
<p:selectBooleanCheckbox value="#{Bean.listAllElement[productConf]}">
<p:ajax listener="#{Bean.checkBoxElement}" update="productConfs" />
</p:selectBooleanCheckbox>
</p:column>
<p:column headerText="Reference" rendered="#{Bean.listAllElement[productConf]}">
<h:outputText value="#{productConf.reference}" />
</p:column>
<p:column headerText="Indice majeur" rendered="#{Bean.listAllElement[productConf]}">
<h:outputText value="#{productConf.majorIndex}" />
</p:column>
<p:column headerText="Indice mineur" rendered="#{Bean.listAllElement[productConf]}">
<h:outputText value="#{productConf.minorIndex}" />
</p:column>
<p:column headerText="Designation" rendered="#{Bean.listAllElement[productConf]}">
<h:outputText value="#{productConf.productConfModel.reference}" />
</p:column>
<p:column headerText="Identifiable" rendered="#{Bean.listAllElement[productConf]}">
<p:selectBooleanCheckbox disabled="true" value="#{productConf.identifiable}" />
</p:column>
</p:dataTable>
</p:tab>
<p:tab id="tabSelectedElement" title="Choisir Elements" style="margin-top: 5px;max-height:400px;overflow-y: scroll;overflow-x: hidden;">
<p:dataTable id="cardsElements" var="cardElement" value="#{Bean.keyAsListForAllElement}">
<f:facet name="header">
<h:outputText value="ELEMENTS" />
</f:facet>
<p:column headerText="">
<p:selectBooleanCheckbox value="#{Bean.listAllElement[cardElement]}">
<p:ajax listener="#{Bean.checkBoxElement}" update="cardsElements" />
</p:selectBooleanCheckbox>
</p:column>
<p:column headerText="Reference">
<h:outputText value="#{cardElement.reference}" />
</p:column>
<p:column headerText="Indice majeur">
<h:outputText value="#{cardElement.majorIndex}" />
</p:column>
<p:column headerText="Indice mineur">
<h:outputText value="#{cardElement.minorIndex}" />
</p:column>
<p:column headerText="Designation">
<h:outputText value="#{cardElement.productConfModel.reference}" />
</p:column>
<p:column headerText="Identifiable">
<p:selectBooleanCheckbox disabled="true" value="#{cardElement.identifiable}" />
</p:column>
</p:dataTable>
</p:tab>
</p:tabView>
第二个标签效果很好,当我检查或不是一个对象我可以在第一个看到他时,但是当我从第一个标签中取消选中时,我看到他消失但是当我切换到第二个标签时他再次出现。
我把它放在我的代码上,检查我的HashMap中有多少个对象和值为true。
BEAN
private HashMap<Product, Boolean> listAllElement = new HashMap<Product, Boolean>();
public void onTabChangeElement(TabChangeEvent event) {
System.out.println("TAB CHANGE");
}
public List<Product> getKeyAsListForAllElement() {
int i = 0;
for (Entry<Product, Boolean> e : this.listAllElement.entrySet()) {
if (e.getValue() == true) {
i++;
}
}
System.out.println("BOOLEAN TRUE = " + i);
return new ArrayList<Product>(this.listAllElement.keySet());
}
输出
BOOLEAN TRUE = 1
BOOLEAN TRUE = 1
BOOLEAN TRUE = 1
BOOLEAN TRUE = 1
BOOLEAN TRUE = 2
TAB CHANGE
BOOLEAN TRUE = 2
BOOLEAN TRUE = 2
BOOLEAN TRUE = 2
BOOLEAN TRUE = 2
我使用Tomcat 7处理primefaces 3.5。
有人可以帮我解决问题吗?
答案 0 :(得分:1)
我解决了我的问题。我必须删除这个监听器:
<p:ajax event="tabChange" listener="#{Bean.onTabChangeElement}" update="tabViewElement:productConfs tabViewElement:cardsElements" />
添加另一个组件来更新p:selectBooleanCheckbox监听器。
<p:ajax listener="#{ConfigurationProductBean.checkBoxElement}" update="cardsElements :form:tabViewElement:productConfs" />
工作正常!谢谢您的帮助 !