我在数据表中有 ap:selectOneMenu 标记 + p:datatable 上有一个 onRowSelect 事件。我的问题是每次单击选择菜单右侧图标@ 内的向下箭头时都会触发 rowSelect 事件。这当然会进行一些重新渲染,因此菜单会在眨眼间打开,然后在重新渲染时再次关闭。当我单击选择菜单的主体时,不会发生此问题,这当然是不可接受的。有任何想法吗?我可以用 h:selectOneMenu 替换它的行为正常并且不会触发选择。但是我需要 p:selectOneMenu 的过滤属性。
这是代码示例:
<p:dataTable id="inParametersDataTable" selection="#{wFDesignBean.selectedParameter}"
selectionMode="single" rowKey="#{p.parameterDefinitionModel.parameterId}"
value="#{wFDesignBean.selectedActivityModel.inParameterModels}"
style="height: 100%; " var="p" >
<p:ajax global="false" event="rowSelect" listener="#{wFDesignBean.loadSelectedParameter}"
update=":cont:tabView:bottomTabView" />
<p:ajax global="false" event="rowUnselect" listener="#{wFDesignBean.clearAllParameterChoices()}" update=":cont:tabView:bottomTabView"/>
<f:facet id="facetId" name="header" >
<h:commandButton id="addNewParam" label="Add New Input Parameter" image="/styling/images/add.png" style="height:15px;" >
<p:ajax global="false" event="click" listener="#{wFDesignBean.addInParameterToSelectedActivity}" update="inParametersDataTable"/>
</h:commandButton>
<h:commandButton label="Reload current parameters list" image="/styling/images/refresh.png" style="height:15px;" >
<p:ajax event="click" listener="#{wFDesignBean.reloadParameters()}" update="inParametersDataTable"/>
</h:commandButton>
<h:commandButton label="Create a new parameter" image="/styling/images/createNew.png" style="height:15px;" >
<p:ajax global="false" event="click" listener="#{navigationBean.showParametersDialog}" update=":cont:tabView:bottomTabView"/>
</h:commandButton>
</f:facet>
<p:column>
<h:commandButton id="delete" image="/styling/images/Delete-icon.png" style="height:15px;">
<p:ajax global="false" event="click" listener="#{wFDesignBean.removeInParam(p)}" update=":cont:tabView:bottomTabView"/>
</h:commandButton>
</p:column>
<p:column headerText="Parameter Name">
<h:selectOneMenu id="paramValues" value="#{p.parameterDefinitionModel.parameterId}" >
<f:selectItem itemValue="#{wFDesignBean.defaultDropDownValue}" itemLabel="--Select Parameter--"/>
<f:selectItems value ="#{wFDesignBean.paramSourceDef}" var="pra" itemLabel="#{pra.parameter_Name}" itemValue="#{pra.parameter_ID}"/>
<p:ajax event="change" listener="#{wFDesignBean.loadSelectedParameterDefinitionData(p.parameterDefinitionModel.parameterId)}" update=":cont:tabView:bottomTabView" />
</h:selectOneMenu>
</p:column>
<p:column headerText="Data Source">
<h:selectOneMenu id="ddsValues" value="#{p.parameterSourceId}">
<f:selectItem itemLabel="None" itemValue="0"/>
<f:selectItems value ="#{wFDesignBean.dataSourceValues}" var="ds" itemLabel="#{ds.lookupValue}" itemValue="#{ds.lookupId}"/>
<p:ajax global="false" event="change" listener="#{wFDesignBean.handleParameterChoices(p)}" update=":cont:tabView:bottomTabView"/>
</h:selectOneMenu>
</p:column>
<p:column headerText="Is Optional">
<h:selectOneMenu id="isOptional" value="#{p.isOptional}">
<f:selectItems value ="#{wFDesignBean.isOptionalLookUp}" var="optional" itemLabel="#{optional.lookupValue}" itemValue="#{optional.lookupId}"/>
<p:ajax global="false" event="change" update=":cont:tabView:bottomTabView"/>
</h:selectOneMenu>
</p:column>
<p:column headerText="Already built">
<h:selectBooleanCheckbox value="#{p.isAlreadyBuiltBool}">
<p:ajax global="false" listener="#{wFDesignBean.setAlreadyBuilt()}"/>
</h:selectBooleanCheckbox>
</p:column>
</p:dataTable>