h的ValueChangeEvent:JSF中的SelectOne菜单是否导致问题?

h的ValueChangeEvent:JSF中的SelectOne菜单是否导致问题?,jsf,datatable,Jsf,Datatable,我有一个富数据表,其中包含两个下拉列表,一个用于状态,另一个用于富列中的大小。我有两个单独的valuechange侦听器方法,即statusChangedListenerValueChangeEvent事件和sizeChangedListenerValueChangeEvent,当这两个下拉列表中的任何一个值发生更改时调用 分别放下 现在,我面临的问题是。。。当我从rich datatable列中的status下拉列表中更改任何状态时,会调用正确的statusChangedListener方法,

我有一个富数据表,其中包含两个下拉列表,一个用于状态,另一个用于富列中的大小。我有两个单独的valuechange侦听器方法,即statusChangedListenerValueChangeEvent事件和sizeChangedListenerValueChangeEvent,当这两个下拉列表中的任何一个值发生更改时调用 分别放下

现在,我面临的问题是。。。当我从rich datatable列中的status下拉列表中更改任何状态时,会调用正确的statusChangedListener方法,但在完成该方法的执行后,系统会在内部调用其他侦听器方法,即sizeChangedListener,即使我是 不更改“大小”下拉列表中的任何内容。当我从“大小”下拉列表中更改任何内容时,将调用我的大小更改侦听器

请查找下面的代码

              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());

  }