如何在PrimeFaces中使p:cellEditor有条件?

时间:2013-05-01 18:30:18

标签: jsf primefaces datatable conditional tablecelleditor

这是我的代码不起作用:

...
<p:column sortBy="#{invoice.customerId}" id="customerId">
    <f:facet name="header"><h:outputText value="Customer ID"/></f:facet>
    <f:facet name="output" rendered="#{!editUIBean.isEditable('customerId')}">
        <h:outputText value="#{invoice.customerId}"/>
    </f:facet>
    <p:cellEditor rendered="#{editUIBean.isEditable('customerId')}">
        <f:facet name="output">
            <h:outputText value="#{invoice.customerId}"/>
        </f:facet>
        <f:facet name="input">
            <h:inputText value="#{invoice.customerId}"/>
        </f:facet>
    </p:cellEditor>
</p:column>
...

所以我要做的是:用户选择一个选项,该选项确定哪些记录是可编辑的,并且只显示可为该选项编辑的记录。对于任何给定选项,只能编辑这些记录中的某些列。如果对于给定选项,列可编辑,则isEditable(columnName)方法返回true,如果列不可编辑,则返回false。我想要做的是,当用户单击编辑记录时,可编辑字段显示输入字段,然后不可编辑字段显示其值。使用上面的代码,当列不可编辑时,在单击编辑之前和之后不显示该值。当字段可编辑时,将显示该值,当您单击编辑时,该值将替换为包含该值的输入字段。所以我的示例有效,只是当字段不可编辑时,该值完全隐藏。我希望在不编辑和编辑时显示不可编辑的值,我只是不希望它们在编辑期间可编辑。

1 个答案:

答案 0 :(得分:8)

此,

<p:column>
    <f:facet name="output" rendered="#{!editUIBean.isEditable('customerId')}">
        <h:outputText value="#{invoice.customerId}" />
    </f:facet>
    ...
</p:column>

不对。 <p:column>不支持<f:facet name="output">。只需将rendered条件放在<h:outputText>本身上。

<p:column>
    <h:outputText value="#{invoice.customerId}" rendered="#{!editUIBean.isEditable('customerId')}" />
    ...
</p:column>