0

タブビュー内に1つのハッシュマップがあり、最初のタブに2つのタブがあり、ユーザーは選択したすべてのオブジェクトを2番目に表示でき、選択できるすべてのオブジェクトを表示できます。どちらも同じハッシュマップです。

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>

2番目のタブは、最初のタブで1つのオブジェクトをチェックするかどうかを確認するとうまく機能しますが、最初のタブから1つのチェックを外すと、彼は消えますが、2番目のタブに切り替えると再び表示されます。

HashMap の値が true であるオブジェクトの数を確認するために、これをコードに追加しました。

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に取り組んでいます。

誰でもここで私を助けてくれますか? 問題はどこにありますか?

4

1 に答える 1

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" /> 

それはうまくいきます!ご協力ありがとうございました !

于 2013-07-11T09:36:50.697 に答える