我正在使用JSF 1.2,我想知道我看到的一个行为。我的JSF页面使用a4j:jsFunction来启动一个进程,然后使用a4j:poll来获取进度百分比。这个过程构建一个对象列表,每个对象又包含一个列表。当a4j:jsFunction调用完成时,将重新呈现a4j:outputPanel。该面板包含一个selectBooleanCheckbox,它被绑定到第二个列表中对象的布尔值:
<a4j:jsFunction name="validate" action="#{MigrationWizardValidateForm.validate}" reRender="validationResult, done"/>
...
<a4j:outputPanel id="validationResult">
<ui:repeat value="#{MigrationWizardValidateForm.validationErrors}" var="validationError">
<ui:repeat value="#{validationError.assignmentVisualisations}" var="assignmentVisualisation">
<h:selectBooleanCheckbox value="#{assignmentVisualisation.assignment.mainLocation}"
...
我看到的是,当进程加载对象时,mainLocation为真。当外部repeat获得它的列表时,它为真。但是当selectBooleanCheckbox呈现时,它调用带有false的setMainLocation。
为什么会这样?
相同形式的a4j:poll和a4j:jsFunction导致了这个问题。将显示进度的民意调查放在一个单独的表单中可以解决这个问题。