p:列呈现属性似乎不适用于p:dataTable var

NDe*_*per 4 datatable jsf primefaces tablecolumn conditional-rendering

我写了一个代码:

<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>
Run Code Online (Sandbox Code Playgroud)

但渲染的属性不适用于该条件.如何使用逻辑运算符使条件有效?使用PrimeFaces 3.4.2

Bal*_*usC 10

您不能有条件地按行显示列.这在逻辑上没有任何意义.您只能在每个表的基础上有条件地呈现它.在<p:column rendered>不能采取基于迭代行性质的条件.它只能采用基于父bean属性的条件.

如果您打算有条件地隐藏当前迭代行的单元格,则只需将rendered属性移动<p:column><p:commandLink>或至少包含整个<p:column>内容的组件,例如<h:panelGroup>.

或者,如果您确实打算有条件地隐藏列,则将rendered属性中使用的条件移动<p:column>#{userLeaveBean}父bean.

  • 然后将条件放在`<p:commandLink>`的`disabled`属性中?请注意,使用`<p:column rendered>`的当前代码尝试显然试图在条件上隐藏列. (2认同)

NDe*_*per -2

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

<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>
Run Code Online (Sandbox Code Playgroud)

而且它的效果就像黄油一样光滑!

  • 请注意,您最初的问题并不是这样表述的。您没有在任何地方说明具体的功能要求,如 *“我需要在条件 X 上禁用命令链接”*。在以后的问题中,你最好这样做,而不是基本上转储一堆错误代码(错误的方式是具体的功能需求不能立即显而易见)并仅仅说“它不起作用” *。 (5认同)