valuechangelistener被多次调用

时间:2016-03-23 03:59:41

标签: jsf-2 weblogic12c icefaces-3

我正在研究icefaces从1.8升级到3.3以及jsf从1.2升级到2.0。

我已使用此链接作为icefaces upgrade

的参考

我正在使用ice:datatable,其中我有一个复选框列,该列被分组为单个worker.Check图片为before upgrade

问题1: 现在迁移后面临的问题是ice的valuechangelistener:selectbooleancheckbox在我检查时工作正常,然后取消选中单个worker的复选框。但是,当我执行以下步骤时:

  1. 检查第一个工作人员(这会更新已分配的门栏)。
  2. 然后检查其他工作人员。这将取消选中上一个已检查的工作人员,并取消选中当前已检查的工作人员。
  3. 为了分析阶段中是否存在任何问题,我使用了balus C博客来检查icefaces遇到valuechangelistner时的阶段。然后我在第二次检查中发现2个或更多的valuechangelistner被调用一个用于当前工作者的前一个工作者(有时两次),这一切都发生在相同的调用应用程序阶段。

    问题2: 即使在单击“确定”按钮或“取消”后,也会调用ValueChangeListener。 通过在ice:commandButton中添加f:param并在valuechangelistener方法中检查param来修复它。

    尝试:

    1. 将页面中的所有冰标记更改为ace标记(与数据表相关,即数据,行和列)。
    2. 结果:与ace valuechangelistener相同的问题以及扭曲的样式。也许是因为我找不到冰:在ace标签中等效的rowHeader还有更多。

      1. 仅将复选框列更改为ace:列。 Valuechangelistener工作正常,但发出“groupOn”属性,所以将其更改为“groupBy”,条件=“组”仍然可能是因为我使用了ice:不支持它的数据表。

      2. 然后我尝试手动实现groupOn功能。对单个worker使用rowspan和呈现单一复选框。但是,rowspan不起作用。此外,当我尝试渲染复选框时,它的样式与我需要的不完全相同。检查这个hattp://postimg.org/image/ih2mgoh7d/从'hattp'中删除'a'。

         <ace:column groupBy ="#{item.workerName} + #{item.workerId}" rowspan="2" 
                                styleClass= "alignSBChbx" >
                                <ice:setEventPhase events="ValueChangeEvent"
                                           phase="INVOKE_APPLICATION">
                                <ice:selectBooleanCheckbox id="dwaCheckbox"  value="#{item.select}" 
                               style=" width:'#{appViewSettings.checkboxSize}';
                                height:'#{appViewSettings.checkboxSize}';" 
                                valueChangeListener="#{dockWorkerAssignmentBean.doorAssignmentChange}" 
                                partialSubmit="true" immediate="true" 
                                disabled="#{!empty dockWorkerAssignmentBean.errorMap['dockWorkersAssignmentPopup:assignmentErrorField']}"
                                rendered="#{item.visible}">
                                <f:attribute name="workerIdSelected" value="#{item.workerId}" />
                                <f:attribute name="assignmentIdSelected" value="#{item.assignmentId}" />
                                </ice:selectBooleanCheckbox>
        
                                </ice:setEventPhase>
                                </ace:column>
        
        
        
        
        
        
          backend
          public final void doorAssignmentChange(final ValueChangeEvent event) {
        System.out.println("inside door Assignment...");
        
        
          final String workerIdSelected = (String) event.getComponent().getAttributes().get(
                "workerIdSelected");
         // unrelevant code
        
         }
        

        }

0 个答案:

没有答案