Атрибут p:column не работает с p:dataTable var

Я написал такой код:

<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


person NDeveloper    schedule 07.06.2013    source источник


Ответы (3)


Вы не можете условно отображать столбец весь для каждой строки. Это не имеет никакого логического смысла. Вы можете только условно отображать его для каждой таблицы. <p:column rendered> не может принять условие, основанное на свойствах итерируемой строки. Он может принимать только условия, основанные на свойствах родительского компонента.

Если вы намерены условно скрыть только ячейку текущей итерируемой строки, просто переместите атрибут rendered с <p:column> на <p:commandLink> или, по крайней мере, компонент, который обертывает все содержимое <p:column>, например <h:panelGroup>.

Или, если вы действительно намерены условно скрыть столбец весь, переместите условия, используемые в атрибуте rendered для <p:column>, в родительский компонент #{userLeaveBean}.

person BalusC    schedule 07.06.2013
comment
Я хочу сделать что-то вроде этого: если значение для leaveDetails.strLeaveStatus равно «Отменено» или «Доступно», <p:commandLink> должно быть отключено, иначе <p:commandLink> должно быть включено. Не хочу скрывать столбец при любом условии. - person NDeveloper; 07.06.2013
comment
Затем просто поместите условие в атрибут disabled <p:commandLink>? Обратите внимание, что ваша текущая попытка кода с <p:column rendered> явно пытается скрыть столбец при условии. - person BalusC; 07.06.2013

первый импорт

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

и добавьте фрагмент пользовательского интерфейса внутрь столбца

<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>
person Eduardo Salgado    schedule 19.11.2018
comment
Как это ответ на вопрос? Объяснений нет вообще. - person Kukeltje; 19.11.2018
comment
@EduardoSalgado Привет, добро пожаловать в StackOverflow. Не могли бы вы добавить описание значения оператора импорта и фрагмента пользовательского интерфейса? Это действительно помогло бы читателям понять, почему это может работать. После этого не торопитесь, чтобы ознакомиться с сайтом, совершив экскурсию. Надеюсь увидеть вас в гостях :-) - person TrebledJ; 19.11.2018

Лучший способ, который я использовал для решения своей проблемы с помощью 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>

и работает как по маслу!

person NDeveloper    schedule 07.06.2013
comment
Обратите внимание, что ваш первоначальный вопрос сформулирован не так. Вы нигде не указали конкретное функциональное требование, как в Мне нужно отключить ссылку на команду при условии X. В будущих вопросах вам лучше сделать это вместо того, чтобы в основном сбрасывать кучу строк неправильного кода (неправильного в том смысле, что конкретное функциональное требование не сразу становится очевидным из него) и просто говорить Это не работает . - person BalusC; 07.06.2013