用于h的valueChangeEvent:JSF中的selectOneMenu导致问题?

时间:2012-03-23 18:55:23

标签: jsf datatable

Project Index Data Table

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

  }

}

请帮助我解决这个问题,因为我们在生产应用程序中遇到了这个严重的问题。

请查找随附的表格,其中包含丰富的数据表。

0 个答案:

没有答案