JSF Primefaces组件正在使用表达式语言评估为空字符串

时间:2012-08-15 15:23:57

标签: 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>

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

<span id="COTreeForm:COTree:0:CO_"> CO: customer1_co1 </span>

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

1 个答案:

答案 0 :(得分:5)

在视图构建期间评估id(和binding)属性。但是#{node}仅在视图渲染时可用。有关更详细的说明,请阅读JSTL in JSF2 Facelets... makes sense?

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