我正在使用基于IceFaces构建的应用程序。此应用程序的一部分允许用户选择表单,创建副本,然后编辑并以不同的名称保存此副本。这些重复有两种变体:一种是相同的副本,另一种是一些信息已经过编辑。
要选择表单,用户可以使用搜索页面返回搜索结果的可排序表格。在当前系统中,每行的最后一列有两个按钮,每个按钮对应一个副本。单击其中任何一个时,它会触发两个侦听器:一个RowSelectionListener,它使用所选行的ID更新模型;第二个侦听器,具体取决于使用此ID检索所选表单的按钮,创建副本,并重定向用户到相关的编辑页面。
我们希望用一个上下文菜单替换这两个按钮,用户可以右键单击一行并选择所需的选项。我们使用contextMenu组件(http://icefaces-showcase.icesoft.org/showcase.jsf?grp=aceMenu&exp=contextMenuBean)实现了这个上下文菜单,它工作正常,有一个问题:右键单击不会触发rowSelectionListener。这意味着用户需要先左键单击要编辑的表条目,然后右键单击以查看菜单。
这当然不是一种非常直观的工作方式,所以我想知道是否有办法将行选择绑定到鼠标右键,或者可能将上下文菜单绑定到鼠标左键 - 无论是有效,只要用户只需点击一次。
答案 0 :(得分:1)
您不需要rowSelectionListener。只需在ice:panelGroup
生成的行上使用oncontextmenu,与属性contextValue
和menuPopup
一起使用。 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>