我正在研究icefaces从1.8升级到3.3以及jsf从1.2升级到2.0。
我已使用此链接作为icefaces upgrade
的参考我正在使用ice:datatable,其中我有一个复选框列,该列被分组为单个worker.Check图片为before upgrade。
问题1: 现在迁移后面临的问题是ice的valuechangelistener:selectbooleancheckbox在我检查时工作正常,然后取消选中单个worker的复选框。但是,当我执行以下步骤时:
为了分析阶段中是否存在任何问题,我使用了balus C博客来检查icefaces遇到valuechangelistner时的阶段。然后我在第二次检查中发现2个或更多的valuechangelistner被调用一个用于当前工作者的前一个工作者(有时两次),这一切都发生在相同的调用应用程序阶段。
问题2: 即使在单击“确定”按钮或“取消”后,也会调用ValueChangeListener。 通过在ice:commandButton中添加f:param并在valuechangelistener方法中检查param来修复它。
尝试:
结果:与ace valuechangelistener相同的问题以及扭曲的样式。也许是因为我找不到冰:在ace标签中等效的rowHeader还有更多。
仅将复选框列更改为ace:列。 Valuechangelistener工作正常,但发出“groupOn”属性,所以将其更改为“groupBy”,条件=“组”仍然可能是因为我使用了ice:不支持它的数据表。
然后我尝试手动实现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
}
}