如何使用cellEditor将验证器(具有禁用条件)添加到primefaces数据表?

时间:2012-11-22 12:55:19

标签: java jsf-2 primefaces

我正在使用primefaces 2.2.1 我希望将f:validatorLength设置为数据表中的一行,其中包含许多行p:cellEditor

<c:set var="flag" value="#{item.key eq 'someKey'}" />
<p:column headerText="header">
    <p:cellEditor>
       <f:facet name="output">
        <h:outputText value="#{item.value}" />
            </f:facet>
               <f:facet name="input">
                <p:inputText value="#{item.value}" style="width:100%" >
    <f:validateLength maximum="4" disabled="#{flag}"/>
                </p:inputText>

                </f:facet>
    </p:cellEditor>
</p:column>

如果所选inputText的标志为true且具有适当的密钥,则对所有inputTexts启用验证器。当flag为false时 - 验证器将为所有inputTexts启用。但我希望将验证器设置为某些inputTexts,依此类推。 有任何想法吗? 感谢。

1 个答案:

答案 0 :(得分:2)

这是一个已知问题。在视图构建期间评估<f:validateXxx>标记的属性。因此,它们不能依赖于仅在视图渲染时间内可用的变量。

这基本上与此处概述和回答的问题相同:How to set converter properties for each row of a datatable?

在您的特定情况下,除了在#{item}方法中以编程方式评估validate()之前自己生成验证器之外,您还可以使用OmniFaces <o:validator>来启用渲染时评估所有属性。

<p:inputText value="#{item.value}">
    <o:validator validatorId="javax.faces.Length" maximum="4" disabled="#{flag}" />
</p:inputText>