.
У меня есть таблица Rich Data, которая содержит два раскрывающихся списка: «Статус», а другой - «Размер» в столбцах. У меня есть два отдельных метода слушателя valuechange, то есть statusChangedListener (событие ValueChangeEvent) и sizeChangedListener (ValueChangeEvent), который вызывается, когда любое из значений изменяется из любого из этих двух отбрасываний
вниз соответственно.
Теперь, с чем я сталкиваюсь, это проблема ... Когда я меняю любой статус из выпадающего списка «Статус» в столбце с богатым набором данных, вызывается мой метод statusChangedListener (), который является правильным, но после завершения выполнения этот метод, система внутренне вызвала другой метод слушателя, то есть sizeChangedListener (), что неправильно, даже если я
ничего не меняя из выпадающего списка "Размер". Когда мой размер изменился, слушатель будет вызываться, когда я меняю что-либо из выпадающего размера.
Пожалуйста, найдите ниже код
<богатые: DataTable>
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>
</ богатых: столбец>
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());
}
}
Пожалуйста, помогите мне разобраться с этой проблемой, поскольку у нас есть серьезные проблемы с нашим рабочим приложением.
Пожалуйста, найдите в прикрепленной форме богатый набор данных.