我有一个<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>
答案 0 :(得分:1)
为支持bean中的每个选择一个菜单提供不同的选项数组。
然后在f:selectItems中使用它们,如下所示:
<f:selectItems value="#{pesquisarItemSolicInvestController.listaPrioridades[index]}" />
在您的事件监听器方法中,将您的行索引作为参数,如下所示:
#{pesquisarItemSolicInvestController.mudarPrioridade(_solicitacao.index, index)}
然后从除listaPrioridades[index]
之外的所有选项数组中删除所选项目。