所以我有一个非常复杂的数据表。它应该能够编辑单行,选择多行,并为每一行显示上下文菜单。单行编辑工作正常,多选工作也很好,我唯一的问题是,每当我尝试在右键单击的行上打开 contextMenu 时,所选 tableItem 的值为 null。只有当我在行上单击显式(左键单击)然后右键单击以显示上下文菜单时,它才有效。这很不方便,我想右键单击contextMenu 以显示选定的itemValue。

我知道还有其他一些关于这个问题的帖子,但没有真正的解决方案或解决方法,所以我希望你能帮助我。

这是我的代码:

  <p:contextMenu id="schadenTableContextMenu" for="todoSchadenTable" 
     style="width: 200px; "> 
 
     <p:submenu id="schadenTableSetAsReadSBM" label="Markieren als" 
        styleClass="my-menu"> 
        <p:menuitem id="schadenTableSetAsReadSBMMI1" value="Gelesen" 
           style="width: 167px;" icon="ui-icon-mail-open" ajax="true" 
           partialSubmit="true" process="@this" 
           action="#{todoLeseHistController.setAlsGelesen()}" update=":mainForm" /> 
 
        <p:menuitem id="schadenTableSetAsReadSBMMI2" value="Ungelesen" 
           style="width: 167px;" icon="ui-icon-mail-closed" ajax="true" 
           partialSubmit="true" process="@this" 
           action="#{todoLeseHistController.setAlsUngelesen()}" 
           update=":mainForm" /> 
     </p:submenu> 
 
     <p:menuitem id="schadenTableContextMenuMI3" 
        style="width:190px !important; font-size:12px !important;" 
        value="In der Applikation öffnen" icon="ui-icon-pencil" 
        title="Öffnet den ToDo in der entsprechenden Applikation." ajax="true" 
        partialSubmit="true" process="@this" 
        action="#{openExternalLinkController.openTodoInExtUrl()}" 
        oncomplete="openExternal(xhr, status, args)" update=":msgGrowl" /> 
 
  </p:contextMenu> 
 
 -------------------dataTable----------------- 
<p:dataTable id="todoSchadenTable" widgetVar="todoSchadenTableW" 
     emptyMessage="Keine Schadenmeldungen gefunden." var="currentTableItem" 
     value="#{schadenTableController.dataModel}" paginator="true" rows="15" 
     filteredValue="#{schadenTableController.filteredTodos}" 
     filterEvent="keyup" filterDelay="500" 
     sortBy="#{currentTableItem.angelegtAm}" sortOrder="descending" 
     editable="true" 
     rendered="#{(loginBean.loggedIn and !mitViewController.leiterViewActiv and mitViewController.schadenTabActive) or (loginBean.loggedIn and leiterTreeController.todoSchadenTableAktiv)}" 
     selection="#{schadenTableController.selectedSchadenmeldungen}" 
     rowKey="#{currentTableItem.meldungId}" 
     style="min-width:1700px !important;"> 
 
     <p:ajax event="rowEdit" global="false" partialSubmit="true" 
        listener="#{schadenTableController.saveErlVorgelBis(currentTableItem)}" /> 
 
     <!-- <p:ajax event="rowSelect" global="false" listener="#{todoLeseHistController.aktuelleSchadenMeldung(currentTableItem)}" /> --> 
 
     <p:ajax event="contextMenu" global="false" partialSubmit="true" 
        listener="#{todoLeseHistController.testeMich()}" /> 
 
     <p:ajax event="toggleSelect" update="zuordnenZuButton" 
        partialSubmit="true" process="@this" global="false" /> 
     <p:ajax event="rowSelectCheckbox" update="@this" partialSubmit="true" 
        process="@this" global="false"  listener="#{todoLeseHistController.testeMich()}"/> 
     <p:ajax event="rowUnselectCheckbox" update="@this" partialSubmit="true" 
        process="@this" global="false" /> 
 
 
     <f:facet name="header"> 
        <p:commandButton value="Zuordnen" id="zuordnenZuButton" ajax="true" 
           partialSubmit="true" process="@this" 
           label="Schandemeldung einem Mitarbeiter zuordnen" 
           oncomplete="zuordnenDialogW.show();" 
           disabled="#{not schadenTableController.hasSelectedSchadenmeldungen}" 
           action="#{zuordnenDialogController.prepareDataForTable()}" 
           style="float: left;" /> 
        <pe:tooltip for="zuordnenZuButton" 
           value="Ausgwählte Schadenmeldungen einem Benutzer zuordnen" 
           myPosition="left center" atPosition="right center" showEffect="fadeIn" 
           hideEffect="fadeOut" showDelay="700" /> 
        <h:outputText 
           value="#{schadenTableController.tableHeaderName} - #{leiterTreeController.getDataTableHeaderZusatz()}" 
           style="color:#cf0008; font-size: 22px;  padding-top: 7px; " /> 
     </f:facet> 
 
 
                   ... 

请您参考如下方法:

当您调用 contextMenu 事件的监听器时,您是否将所选行分配给支持 bean 中的变量?

它应该是这样的:

        <p:ajax event="contextMenu"  listener="#{backingBean.contextMenuSelect}" /> 

这在支持 bean 中:
        public void contextMenuSelect(SelectEvent event) { 
             selectedRow = (EntityClassName) event.getObject(); 
        } 


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!