ValueChangeEvent для h: selectOneMenu в JSF, вызывающее проблему? - PullRequest
2 голосов
/ 23 марта 2012

Project Index Data Table.

У меня есть таблица 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());

  }

}

Пожалуйста, помогите мне разобраться с этой проблемой, поскольку у нас есть серьезные проблемы с нашим рабочим приложением.

Пожалуйста, найдите в прикрепленной форме богатый набор данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...