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

时间:2013-09-26 17:02:47

标签: jsf contextmenu icefaces

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

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

我们希望用一个上下文菜单替换这两个按钮,用户可以右键单击一行并选择所需的选项。我们使用contextMenu组件(http://icefaces-showcase.icesoft.org/showcase.jsf?grp=aceMenu&exp=contextMenuBean)实现了这个上下文菜单,它工作正常,有一个问题:右键单击不会触发rowSelectionListener。这意味着用户需要先左键单击要编辑的表条目,然后右键单击以查看菜单。

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

1 个答案:

答案 0 :(得分:1)

您不需要rowSelectionListener。只需在ice:panelGroup生成的行上使用oncontextmenu,与属性contextValuemenuPopup一起使用。 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>