Jsf p:column呈现的属性似乎不适用于p:dataTable变量

Jsf p:column呈现的属性似乎不适用于p:dataTable变量,jsf,primefaces,datatable,tablecolumn,conditional-rendering,Jsf,Primefaces,Datatable,Tablecolumn,Conditional Rendering,我编写了如下代码: <p:column headerText="Edit" width="40" rendered="#{(leaveDetails.strLeaveStatus == 'Canceled') or (leaveDetails.strLeaveStatus == 'Availed')}"> <p:commandLink actionListener="#{userLeaveBean.editAppliedLeave}" title="Edit" disa

我编写了如下代码:

<p:column headerText="Edit" width="40" rendered="#{(leaveDetails.strLeaveStatus == 'Canceled') or (leaveDetails.strLeaveStatus == 'Availed')}">
    <p:commandLink actionListener="#{userLeaveBean.editAppliedLeave}" title="Edit" disabled="true" process="@this" update="leaveDataTable" immediate="false">
        <h:graphicImage url="resources/images/edit.JPG"/>
            <f:attribute name="userId" value="#{employee.name}"/>
            <f:attribute name="editFirstHalf" value="#{leaveDetails.strStartTiming}"/>
            <f:attribute name="editSecondHalf" value="#{leaveDetails.strEndTiming}"/>
            <f:attribute name="editFrom" value="#{leaveDetails.dtLeaveFromDate}"/>
            <f:attribute name="editTo" value="#{leaveDetails.dtLeaveToDate}"/>
            <f:attribute name="leaveId" value="#{leaveDetails.strLeaveId}"/>
    </p:commandLink>
</p:column>


但渲染属性不适用于该条件。如何使用逻辑运算符使条件起作用?使用PrimeFaces 3.4.2

不能有条件地按每行呈现整个列。这在逻辑上毫无意义。只能在每个表的基础上有条件地呈现它。
不能采用基于迭代行属性的条件。它只能接受基于父bean属性的条件

如果要有条件地仅隐藏当前迭代行的单元格,则只需将
呈现的
属性从
移动到
,或者至少移动一个封装整个
内容的组件,例如


或者如果你真的想有条件地隐藏整列,那么把
rendered
属性中使用的条件移动到
{userLeaveBean}
父bean中。

我在上帝的帮助下解决问题的最佳方法是:

<p:column headerText="Edit" width="40">
    <p:commandLink actionListener="#{userLeaveBean.editAppliedLeave}" title="Edit" process="@this" update="leaveDataTable" 
        immediate="false" disabled="#{(leaveDetails.strLeaveStatus == 'Canceled') or (leaveDetails.strLeaveStatus == 'Availed')}">
        <h:graphicImage url="resources/images/edit.JPG"/>
        <f:attribute name="userId" value="#{employee.name}"/>
        <f:attribute name="editFirstHalf" value="#{leaveDetails.strStartTiming}"/>
        <f:attribute name="editSecondHalf" value="#{leaveDetails.strEndTiming}"/>
        <f:attribute name="editFrom" value="#{leaveDetails.dtLeaveFromDate}"/>
        <f:attribute name="editTo" value="#{leaveDetails.dtLeaveToDate}"/>
        <f:attribute name="leaveId" value="#{leaveDetails.strLeaveId}"/>
    </p:commandLink>
</p:column>


而且它像黄油一样光滑

首次导入

<html xmlns:ui="http://java.sun.com/jsf/facelets">

并在列中添加ui片段

<p:column headerText="Edit" width="40">
<ui:fragment rendered="#{(leaveDetails.strLeaveStatus == 'Canceled') or (leaveDetails.strLeaveStatus == 'Availed')}">
    <p:commandLink actionListener="#{userLeaveBean.editAppliedLeave}" title="Edit" disabled="true" process="@this" update="leaveDataTable" immediate="false">
        <h:graphicImage url="resources/images/edit.JPG"/>
            <f:attribute name="userId" value="#{employee.name}"/>
            <f:attribute name="editFirstHalf" value="#{leaveDetails.strStartTiming}"/>
            <f:attribute name="editSecondHalf" value="#{leaveDetails.strEndTiming}"/>
            <f:attribute name="editFrom" value="#{leaveDetails.dtLeaveFromDate}"/>
            <f:attribute name="editTo" value="#{leaveDetails.dtLeaveToDate}"/>
            <f:attribute name="leaveId" value="#{leaveDetails.strLeaveId}"/>
    </p:commandLink>
</ui:fragment> 
</p:column>


我想这样做:如果
leaveDetails.strLeaveStatus
的值为“已取消”或“可用”,则应禁用
,否则应启用
。不想在任何条件下隐藏该列。然后将该条件置于
禁用属性中即可?请注意,您当前对
的代码尝试显然是试图隐藏某个条件下的列。请注意,您最初的问题并不是这样表述的。您没有在“我需要在条件X下禁用命令链接”中说明具体的功能需求。在以后的问题中,你最好这样做,而不是基本上扔掉一堆错误的代码(错误的方式使得具体的功能需求不能立即从中看出),仅仅说“它不工作”。这是如何回答这个问题的?这里没有任何解释。@EduardoSalgado您好,欢迎来到StackOverflow。能否添加一个import语句和ui片段重要性的描述?这将真正帮助读者理解为什么这可能有效。之后,请花时间通过以下方式熟悉本网站。希望能见到你:-)