具有表达式语言的JSF Primefaces组件的id被评估为empy string

Rar*_*esI 1 jsf primefaces

拥有以下xhtml代码:

<h:form id="COTreeForm">
            <p:tree value="#{COBean.root}" var="node" id="COTree" dynamic="true" selectionMode="single">
                <p:ajax event="select" update="@(.coDetailsPanel)" listener="#{COBean.onNodeSelect}" />

                <p:treeNode id="COtreeNode" type="customerOrder" icon="ui-icon-co">
                    <p:outputPanel  id="CO_#{node.key}"> CO: #{node.key} </p:outputPanel>
                    <!--  <p:draggable for="CO_#{node.key}" helper="clone" />  -->  
                </p:treeNode>

                <p:treeNode id="COItreeNode" type="customerOrderItem">
                    <p:outputPanel id="COI_#{node.key}" styleClass="ui-tree-node-label-coi"> COI: #{node.key} </p:outputPanel>
                    <!--  <p:draggable for="COI_#{node.key}" helper="clone" />  -->
                </p:treeNode>

            </p:tree>

    </h:form>
Run Code Online (Sandbox Code Playgroud)

<p:outputPanel id="CO_#{node.key}"> CO: #{node.key} </p:outputPanel>进行评估,以下面的HTML代码:

<span id="COTreeForm:COTree:0:CO_"> CO: customer1_co1 </span>
Run Code Online (Sandbox Code Playgroud)

为什么#{node.key}对id属性求值为空字符串?!请注意,它已被正确评估为标记内容.

Bal*_*usC 5

id(和binding在视图编译时间)的属性进行评估.该#{node}视图中渲染时间不过才有效.有关更详细的说明,请阅读JSF2 Facelets中的JSTL ...有意义吗?

只是不要_#{node.key}在所有idfor属性中使用.JSF/PrimeFaces已经根据当前迭代的树节点自动生成正确的唯一客户端ID.