如何从dataTable中的selectOneMenu中删除所选项目?

时间:2015-10-30 14:29:20

标签: javascript java jquery jsf primefaces

我有一个<p:dataTable/>,每行我有一个<p:selectOneMenu/>,它们是从1到列表中的项目数的整数列表。因此,如果我的每个<p:dataTable /> <p:selectOneMenu/>上有30个项目的列表,则会显示1到30之间的选项。但是,我在<p:selectOneMenu />内遇到问题<p:dataTable /> 1}}。如果在一行中选择了某个项目,我必须从其他项目<p:selectOneMenu/>中删除此项目。例如,如果选择了项目“1”,那么所有其他项目都不能将数字“1”作为要选择的选项。

那么我可以在托管bean /控制器上执行某种方式吗?我试图通过使用javascript获取<p:selectionOneMenu/>,但我没有成功,因为我有问题得到clientId而且selectOneMenu使用div来显示项目。有关这个问题的任何想法吗?

这是我的xhtml

<p:dataTable id="dataTableSolicitacoes" value="#{pesquisarItemSolicInvestController.listaSolicitacoes}"
            selectionMode="single" var="_solicitacao" rowKey="#{_solicitacao.index}" rowIndexVar="index"
            selection="#{pesquisarItemSolicInvestController.linhaSelecionada}"
        <p:ajax event="rowSelect" listener="#{pesquisarItemSolicInvestController.onRowSelect}" process="@(#dataTableSolicitacoes)" update="@(#dataTableSolicitacoes), @(#panelBotoes)" />       
        <p:column style="vertical-align: middle; width: 60px !important;">
            <f:facet name="header"> 
                <h:outputText value="#{messages.LABEL_PRIORIDADE}" title="#{messages.TITLE_INFORME_ORDEM_PRIO}"/> 
            </f:facet>
            <p:selectOneMenu id="cbPrioridade" value="#{_solicitacao.prioridade}" style="width:60px !important;"
                styleClass="ui-inputfield ui-inputtext ui-widget ui-state-default ui-corner-all" 
                disabled="#{!mf:hasPermission(securityController,'manterItensEnviados,manter')}">
                    <f:selectItem itemLabel="" itemValue="" noSelectionOption="true" />
                    <f:selectItems value="#{pesquisarItemSolicInvestController.listaPrioridades}" />
                    <p:ajax event="change" listener="#{pesquisarItemSolicInvestController.mudarPrioridade(_solicitacao.index)}" 
                        process="@(#dataTableSolicitacoes), @(#panelBotoes)" update="@(#dataTableSolicitacoes), @(#panelBotoes)" />                 
            </p:selectOneMenu>
        </p:column>
    </p:dataTable>

1 个答案:

答案 0 :(得分:1)

为支持bean中的每个选择一个菜单提供不同的选项数组。

然后在f:selectItems中使用它们,如下所示:

<f:selectItems value="#{pesquisarItemSolicInvestController.listaPrioridades[index]}" />

在您的事件监听器方法中,将您的行索引作为参数,如下所示:

#{pesquisarItemSolicInvestController.mudarPrioridade(_solicitacao.index, index)}

然后从除listaPrioridades[index]之外的所有选项数组中删除所选项目。