在选项卡内的dataTable上使用contextMenu

时间:2013-11-26 18:31:52

标签: jsf primefaces

我正在尝试将contextMenu添加到选项卡中包含的dataTable。我已经能够将菜单显示在一个不在选项卡内的dataTable上,并且还要让它显示在整个选项卡上......但不是专门针对dataTable。

我在contextMenu的'for'属性中尝试了几个不同的引用...有些不高兴,有些则没有,但右键单击菜单没有显示。

我正在使用PrimeFaces 4.0。有什么建议吗?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:p="http://primefaces.org/ui">
<h:head></h:head>
<h:body>
    <h:form id="someForm">
        <p:tabView id="tv" var="tb" value="#{TempBeans.tabs}">
            <p:ajax event="tabClose" listener="#{TempBeans.tabClose}"
                update="@form" />
            <p:tab id="tempTab" title="#{tb.name}" closable="true">
                <p:dataTable id="dTable" var="d" value="#{tb.dtbs}">
                    <p:column id="column1" headerText="name">
                        <h:outputText value="#{d.name}" />
                    </p:column>
                    <p:column id="column2" headerText="id">
                        <h:outputText value="#{d.id}" />
                    </p:column>
                </p:dataTable>
            </p:tab>
        </p:tabView>
        <p:contextMenu for=":someForm:tv:dTable">
            <p:menuitem value="TableView" update="@form" icon="ui-icon-search" />
            <p:menuitem value="TableDelete" update="@form" icon="ui-icon-close" />
        </p:contextMenu>    
    </h:form>
</h:body>
</html>

1 个答案:

答案 0 :(得分:0)

好吧,通过将表格更改为可选择,我能够显示上下文菜单......这无论如何都是我想要的。但是,现在我还有另一个问题......如果我将selectionMode设置为“multiple”并使用ctrl-clicks选择行,则它似乎只需单击一次即可注册最后一次右键单击。

  1. 点击一行
  2. 按住Ctrl键单击第二行
  3. 按住Ctrl键单击第三行
  4. 右键单击其中一行...取消选择其他行
  5. 所以我似乎必须强迫我的用户:

    1. 点击一行
    2. 按住Ctrl键单击第二行
    3. ctrl-right-click第三行
    4. AAAAAAAAAAAAAAAAAAAAAAAAAAARRRRGH !!交易破坏者...看起来我要回到史前时代,并用复选框实现多项选择。

      请有人告诉我,我错了,并且有一种简单的方法可以让它不像这样。

      无论如何,这是我最终设法让contextMenu出现的方式:

      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:p="http://primefaces.org/ui">
      <h:head></h:head>
      <h:body>
          <h:form id="someForm">
              <p:tabView id="tv" var="tb" value="#{TempBeans.tabs}">
                  <p:ajax event="tabClose" listener="#{TempBeans.tabClose}" update="@form" />
                  <p:tab id="tempTab" title="#{tb.name}" closable="true">
                      <p:dataTable id="dTable" var="d" value="#{tb.dtbs}" selection="#{tb.selectedDTBs}" selectionMode="multiple" rowKey="#{d.name}">
                          <p:column id="column1" headerText="name">
                              <h:outputText value="#{d.name}" />
                          </p:column>
                          <p:column id="column2" headerText="id">
                              <h:outputText value="#{d.id}" />
                          </p:column>
                      </p:dataTable>
                      <p:contextMenu id="cMenuId" for="dTable">
                          <p:menuitem value="TableView" update="@form" icon="ui-icon-search" />
                          <p:menuitem value="TableDelete" update="@form" icon="ui-icon-close" />
                      </p:contextMenu>
                  </p:tab>
              </p:tabView>
          </h:form>
      </h:body>
      </html>