ajax调用后组件不会更新

时间:2012-09-24 15:45:31

标签: jsf datatable components

许多问题与此问题非常相似,但我看不到解决方案。

以下代码不会出错,但不会按预期运行。 它显示三列:

  • 第一列是一个复选框,用于激活第二列的可编辑字段

  • 第3列是行删除方法

  • 第4栏只是一个按钮,可以转到下一页

        

        <h:column>
            <h:panelGroup id="editCol">
    
                <f:facet name="header">
                    <h:outputText value="Edit" style="font-weight: bold">
                    </h:outputText>
                </f:facet>
                <h:selectBooleanCheckbox value="#{m.editable}" onclick="submit()">
                    <f:ajax execute="editCol :formId:dataId:authorCol" render="editCol :formId:dataId:authorCol" />
                </h:selectBooleanCheckbox>
            </h:panelGroup>
    
        </h:column>
    
        <h:column>
            <h:panelGroup id="authorCol">
                <f:facet name="header">
                    <h:outputText value="Label" style="font-weight: bold">
                    </h:outputText>
                </f:facet>
                <h:inputText value="#{m.author2displayed}" rendered="#{m.editable}" size="10"/>
                <h:outputText value="#{m.author2displayed}" rendered="#{not m.editable}"/>
                <h:commandButton value="save edits" rendered="#{m.editable}" onclick="submit()" action ="#{finalCheckBean.saveedits()}">
                    <f:ajax execute="authorCol" render="authorCol" />
                </h:commandButton>
            </h:panelGroup>
        </h:column>
    
        <h:column>
            <h:panelGroup id="deleteCol">
                <f:facet name="header">
                    <h:outputText value="delete row(s)" style="font-weight: bold">
                    </h:outputText>
                </f:facet>
                <h:selectBooleanCheckbox value="#{m.deleted}" onclick="submit()"/>
                <h:commandButton value="delete row(s)?" rendered="#{m.deleted}" onclick="submit()" action ="#{finalCheckBean.deleteRow()}"/>
            </h:panelGroup>
        </h:column>
    
        <h:column>
            <f:facet name="header">
                <h:commandButton value="save changes" action="#{finalCheckBean.moveon}"/>
            </f:facet>
    
        </h:column>
    
    </h:dataTable>
    

    1. 当我勾选第一列中的selectBooleanCheckbox时,该框会被勾选,但没有任何反应,实际上应该切换第二列中组件的显示。

    2. 有趣的是,当我然后点击第3列中的selectBooleanCheckbox(不使用ajax)时,第二列会重新呈现,我可以看到我在步骤1中执行tick操作的效果。

如何让第一栏中的selectBooleanCheckbox正常工作?

1 个答案:

答案 0 :(得分:2)

<h:selectBooleanCheckbox ... onclick="submit()">
    <f:ajax ... />
</h:selectBooleanCheckbox>

您的具体问题是由ajax复选框上的onclick="submit()"引起的。去掉它。它触发了form.submit(),与<f:ajax>完全冲突。

你也在另一个没有ajax的复选框上使用它,这可能没用,但是你也在“删除行”中使用它?命令按钮完全没必要。它默认情况下已触发表单提交。