我有Rich Data表,其中包含两个用于“Status”的下拉列表和另一个用于富列中“Size”的下拉列表。我有两个单独的valuechange侦听器方法,即statusChangedListener(ValueChangeEvent事件)和sizeChangedListener(ValueChangeEvent),当任何值从这两个中的任何一个更改时调用 分别下来。
现在,我面临的问题是......当我从富数据表列的“状态”下拉列表中更改任何状态时,我的statusChangedListener()方法被调用,这是正确的,但是在完成执行之后该方法,系统内部调用其他侦听器方法,即sizeChangedListener(),即使我是错误的 没有改变“大小”下拉菜单中的任何内容。随着我的大小改变,当我从大小下拉列表中更改任何内容时,将调用侦听器。
请找到以下代码
<富:数据表>
< rich:column id =“statusColumn”filterMethod =“#{projectFilterBean.filterProjectTable}”
filterValue="#{projectFilterBean.filterValue}"
sortBy="#{project.status.description}">
<f:facet name="header"><h:outputText value="Status"/></f:facet>
<h:selectOneMenu id="test" value="#{project.status}"
converter="#{statusConverter}"
valueChangeListener="#{projectController.projectStatusChanged}"
styleClass="statusSelector" immediate="true">
<f:selectItems value="#{projectController.existingStatusSelectItems}"/>
<a4j:support event="onchange" reRender="data_table,data_scroller" status="waitStatus" />
</h:selectOneMenu>
&LT; /富:柱&GT;
&lt; rich:column id =“dimensionColumn”
filterMethod="#{projectFilterBean.filterProjectTableWithSize}"
filterValue="#{projectFilterBean.filterSizeValue}"
sortBy="#{project.dimension.widthAndHeight}">
<f:facet name="header"><h:outputText value="Size"/></f:facet>
<h:selectOneMenu value="#{project.dimension}"
converter="#{dimensionConverter}"
valueChangeListener="#{projectController.sizeChanged}"
styleClass="dimensionSelector">
<f:selectItems value="#{projectController.existingDimensionSelectItems}"/>
</h:selectOneMenu>
</rich:column>
...
Java代码
public void sizeChanged(ValueChangeEvent event) {
try {
Project selectedProject = (Project) getProjectDataTable().getRowData();
Dimension oldDimension = selectedProject.getDimension();
Dimension selectedDimension = (Dimension) event.getNewValue();
// doing some business logic over here
}
}
public void projectStatusChanged(ValueChangeEvent event)
{
try
{
Project selectedProject = (Project) getProjectDataTable().getRowData();
Status oldStatus = selectedProject.getStatus();
Status selectedStatus = (Status) event.getNewValue();
if (selectedStatus != null) {
selectedProject.setStatus(selectedStatus);
selectedProject.setUpdatedAt(new Timestamp(System.currentTimeMillis()));
if (selectedStatus.getName().equals("PROJECT_ACTIVE")) {
if (selectedProject.getActivatedAt() == null) {
selectedProject.setActivatedAt(new Timestamp(System.currentTimeMillis()));
}
selectedProject.setDeletable(false);
}
selectedProject.setXmlUpdate(true);
if(projectService.updateWithReturn(selectedProject))
logger.debug(selectedProject + "Status changed from " + oldStatus.getDescription() + " to " +
selectedStatus.getDescription());
}
} catch (Exception ex) {
logger.error(ex.getMessage());
}
}
请帮助我解决这个问题,因为我们在生产应用程序中遇到了这个严重的问题。
请查找随附的表格,其中包含丰富的数据表。