0

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

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

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

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

4

1 回答 1

1

您不需要 rowSelectionListener。ice:panelGroup只需在与属性一起使用时生成的行上使用 oncontextmenucontextValuemenuPopup. 可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>
于 2013-10-01T15:16:27.073 回答