Jsf Icefaces:使用右键单击选择表中的行

Jsf Icefaces:使用右键单击选择表中的行,jsf,contextmenu,icefaces,Jsf,Contextmenu,Icefaces,我正在使用基于IceFaces的应用程序。此应用程序的一部分允许用户选择表单,创建副本,然后以其他名称编辑和保存此副本。这些副本有两种变体:一种是相同的副本,另一种是经过编辑的信息 要选择表单,用户有一个搜索页面,返回可排序的搜索结果表。在当前系统中,每行的最后一列有两个按钮,每个重复变量对应一个按钮。单击其中一个时,它会触发两个侦听器:一个RowSelectionListener,它使用所选行的ID更新模型;另一个侦听器(取决于使用此ID检索所选表单、创建副本并将用户重定向到相关编辑页面的按钮

我正在使用基于IceFaces的应用程序。此应用程序的一部分允许用户选择表单,创建副本,然后以其他名称编辑和保存此副本。这些副本有两种变体:一种是相同的副本,另一种是经过编辑的信息

要选择表单,用户有一个搜索页面,返回可排序的搜索结果表。在当前系统中,每行的最后一列有两个按钮,每个重复变量对应一个按钮。单击其中一个时,它会触发两个侦听器:一个RowSelectionListener,它使用所选行的ID更新模型;另一个侦听器(取决于使用此ID检索所选表单、创建副本并将用户重定向到相关编辑页面的按钮)

我们希望将这两个按钮替换为一个上下文菜单,用户可以在其中右键单击一行并选择所需的选项。我们已经使用contextMenu组件()实现了这个上下文菜单,它工作正常,但有一个问题:右键单击不会触发rowSelectionListener。这意味着用户需要首先左键单击要编辑的表条目,然后右键单击以查看菜单


这当然不是一种非常直观的工作方式,因此我想知道是否有一种方法可以将行选择绑定到鼠标右键,或者将上下文菜单绑定到鼠标左键-两者都可以,只要用户只需单击一次。

您不需要rowSelectionListener。当与属性
contextValue
menuPopup
一起使用时,只需在由
ice:panelGroup
生成的行上使用oncontextmenu即可。
contextValue
可用于唯一标识行

<ice:column>
<f:facet name="header">
        <h:outputText value="Col header" />
</f:facet>
    <ice:panelGroup contextValue="#{myVar.rowId}" menuPopup="menupopupId">
        <ice:outputText value="#{myVar.property}" />
    </ice:panelGroup>
</ice:column>
....
<ui:include src="menuPop.xhtml"/>

....
menuPop.xhtml

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ice="http://www.icesoft.com/icefaces/component"
xmlns:ui="http://java.sun.com/jsf/facelets">
<ice:panelGroup styleClass="icePnlMenuPopupGrp">
    <ice:menuPopup id="menupopupId">
        <ice:menuItem id="myItem" value="My Item"
            actionListener="#{controller.doAction}">
        </ice:menuItem>
        .....
    </ice:menuPopup>
</ice:panelGroup>
</ui:composition>

.....