PrimeFaces Slider 'for' 值在数据表中不起作用

PrimeFaces Slider 'for' value not working in a dataTable

大家好,我正在尝试创建一个数据 table,人们可以在其中为每一行设置 1 到 10 之间的值:

<p:dataTable id="coteTable" value="#{editEvaluationView.evaluation.listCote}" var="cote">

        <p:column colspan="10">

            <p:inputText id="cote_#{cote.critere.code.trim()}"
                                    value="#{cote.valeur}" />
            <p:slider minValue="1" maxValue="10"
                                    for="cote_#{cote.critere.code.trim()}" />
        </p:column>

        <p:column>
                <p:inputText id="commmentaire" value="#{cote.observations}" />
        </p:column>
</p:dataTable>

但它不识别 id(cote_CRT001 是第一个 cote_#{cote.critere.code.trim()} 值):

javax.servlet.ServletException: Cannot find component for expression "cote_CRT001" referenced from "formEditEval:coteTable:0:j_idt120".

我真的不知道该尝试什么了。有人知道为什么它不起作用吗?

dataTable 是一个命名容器,因此其中的组件将以 dataTableid 为前缀。此外,table(每行)中呈现的数据的每次迭代都会对生成的 id 产生影响。因此,您无需尝试创建唯一的 id。如果你只是简单地使用 coteinputTextid。由于表单也是一个命名容器,它将在第一行生成为 formId:coteTable:0:cote,在第二行生成为 formId:coteTable:1:cote,依此类推。在您的 slider 中,您可以简单地使用 for="cote" 因为您正在引用同一命名容器中的组件。

所以,简单地写:

<p:dataTable id="coteTable" value="#{editEvaluationView.evaluation.listCote}" var="cote">
    <p:column colspan="10">
        <p:inputText id="cote" value="#{cote.valeur}" />
        <p:slider minValue="1" maxValue="10" for="cote" />
    </p:column>
    ...
</p:dataTable>

另见

  • How to find out client ID of component for ajax update/render? Cannot find component with expression "foo" referenced from "bar"