Элементы ContextMenus PrimeFaces включены на основе выбранных значений строк - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть dataTable, в котором перечислены вакансии. Эти задания могут быть включены / отключены. В настоящее время я использую contextMenu для включения / отключения выбранной работы. Это работает нормально, хотя.

Теперь я хочу включить / отключить элементы меню в contextMenu в зависимости от состояния задания (задание включено / отключено).

Если задание включено, параметр «Включить» долженбыть отключенным. Если задание отключено, параметр «Отключить» должен быть отключен.

Ниже приведен код, который у меня имеется:

<p:tab title="Jobs" id="jobTab">
    <p:dataTable id="jobs" var="job" value="#{model.jobs}"
        selectionMode="single" selection="#{model.selection}"
        onRowClick="" scrollable="true" scrollHeight="600"
        rowKey="#{job.jobName}">
        <p:column headerText="Group Name">
            <h:outputText value="#{job.jobGroup}" />
        </p:column>
        <p:column headerText="Job Name">
            <h:outputText value="#{job.jobName}" />
        </p:column>
        <p:column headerText="Job Enabled">
            <p:selectBooleanCheckbox value="#{job.enabled}" disabled="true" />
        </p:column>
    </p:dataTable>

    <p:contextMenu for="jobs" id="ctxJobs" widgetVar="ctxJobs">
        <p:menuitem value="Enable" update="jobs" action="enableJob"
            disabled="#{model.selection.enabled}" />
        <p:menuitem value="Disable" update="jobs" action="disableJob"
            disabled="#{!model.selection.enabled}" />
        <p:separator />
        <p:menuitem value="Start" action="startJob" />
    </p:contextMenu>

Действия contextMenu относятся к состоянию просмотрапереходы spring webflow, хотя это не должно быть проблемой, поскольку веб-поток не отображает детали.

В данный момент контекстное меню включает / отключает элементы при выполнении действия. Я имею в виду следующее: задание включено. Я щелкаю правой кнопкой мыши по строке для контекстного меню. Сначала «Включить» включено и «Отключить» отключено. Так что теперь я могу нажать «Включить». Это приводит к перезагрузке данных поддержки, и, в свою очередь, также перезагружается контекстное меню. Если я щелкну правой кнопкой мыши на той же строке (она по-прежнему включена), в контекстном меню отключены «Включить» и «Отключить». На самом деле не имеет значения, какую строку я выбираю, элементы не обновляются, пока я не выполню никаких действий.

Это не очень удобно для пользователя. Также я думаю, что обновление данных каждый раз, когда я выбираю новую строку или открываю контекстное меню, не столь высокоэффективно.

Вопрос в том, каков наилучший способ включить / отключить menuItems на основена значение строки, чтобы menuItems для каждой строки?

EDIT:

После добавления следующего кода:

<p:ajax event="rowSelect" update="form:tabView:ctxJobs" />

contextMenu обновляется какнеобходимо, но только при щелчке левой кнопкой мыши. При использовании только щелчка правой кнопкой мыши контекстное меню не обновляется по мере необходимости. Это намекает на то, что щелчок правой кнопкой мыши не вызывает событие rowSelect. Есть несколько вопросов по этой теме, но я бы не хотел использовать JavaScript для решения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...