h的ValueChangeEvent:JSF中的SelectOne菜单是否导致问题?
我有一个富数据表,其中包含两个下拉列表,一个用于状态,另一个用于富列中的大小。我有两个单独的valuechange侦听器方法,即statusChangedListenerValueChangeEvent事件和sizeChangedListenerValueChangeEvent,当这两个下拉列表中的任何一个值发生更改时调用 分别放下 现在,我面临的问题是。。。当我从rich datatable列中的status下拉列表中更改任何状态时,会调用正确的statusChangedListener方法,但在完成该方法的执行后,系统会在内部调用其他侦听器方法,即sizeChangedListener,即使我是 不更改“大小”下拉列表中的任何内容。当我从“大小”下拉列表中更改任何内容时,将调用我的大小更改侦听器 请查找下面的代码h的ValueChangeEvent:JSF中的SelectOne菜单是否导致问题?,jsf,datatable,Jsf,Datatable,我有一个富数据表,其中包含两个下拉列表,一个用于状态,另一个用于富列中的大小。我有两个单独的valuechange侦听器方法,即statusChangedListenerValueChangeEvent事件和sizeChangedListenerValueChangeEvent,当这两个下拉列表中的任何一个值发生更改时调用 分别放下 现在,我面临的问题是。。。当我从rich datatable列中的status下拉列表中更改任何状态时,会调用正确的statusChangedListener方法,
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>
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());
}