如何在多个条目的上下文中更新组件?

How to update a component in the context of many entries?

我正在使用 JSF 2.2 和 primefaces 6.0

我有一个 table 这种形式

        <table>
            <tr>
                <td rowspan="2">
                    Direction
                </td>
                    <td colspan="#{etpBean.activites.size()}">
                    Activites
                </td>
                </td>
                    <td rowspan="2">
                    Controle
                </td>
            </tr>

            <tr>
              <ui:repeat var="activite" value="#{etpBean.activites}">
                        <td>
                            <h:outputText value="#{activite.nom}"/>
                        </td>
              </ui:repeat>
            </tr>

            <ui:repeat value="#{etpBean.affectations}" var="affectation">
               <tr> 
                <ui:repeat var="activite" value="#{etpBean.activites}">

                <td rowspan="#{etpBean.affectations.size()}"><h:outputText  value="#{affectation.structure.nom}" />
                </td>

                <td>
                    <p:inputText value="#{etpBean.getValeurActivite(affectation,activite).etp}" required="true">
                    <p:ajax listener="#{etpBean.onControleChange(affectation)}" update="controle" event="blur" />
                    </p:inputText>                                                  
                </td>
                <td>    
                <h:outputText id="controle" value="#{etpBean.message}"/>
                </td>
                </ui:repeat>
               </tr> 
            </ui.repeat>
      </table>

对于此 table 的每一行,我有许多相同类型的输入,在我的侦听器 onControleChange 中,我检索这些输入的值当我计算每个条目后的总和时,我想更新列controle if the sum more than 100 i want to put not ok else Ok.

这是onControleChange

public void onControleChange(Affectation affectation){
    double somme=0;

    for (ETP  etp : etpss) {

        if(etp.getAffectation().equals(affectation) && etp.getEtp() != null){
            somme+=etp.getEtp();
        }
    affectation.setSomme(somme);
    }
    if(somme>100){
        this.message="Not ok";
    }else{
        this.message="Ok";
    }
}

但是当我 运行 我的 XHTML 出现这个错误

Grave: org.primefaces.expression.ComponentNotFoundException: Cannot find component for expression "controle" referenced from "form:j_idt77:0:j_idt94:0:j_idt96".

不知道是不是因为ui: repeat all of the column "contrôle" takes the same id.

有什么想法吗??

你试过了吗

<p:ajax listener="#{etpBean.onControleChange(affectation)}" process="@this" update=":#{p:component('controle')}" event="blur" />