许多问题与此问题非常相似,但我看不到解决方案。
以下代码不会出错,但不会按预期运行。 它显示三列:
第一列是一个复选框,用于激活第二列的可编辑字段
第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>
当我勾选第一列中的selectBooleanCheckbox
时,该框会被勾选,但没有任何反应,实际上应该切换第二列中组件的显示。
有趣的是,当我然后点击第3列中的selectBooleanCheckbox
(不使用ajax)时,第二列会重新呈现,我可以看到我在步骤1中执行tick操作的效果。
如何让第一栏中的selectBooleanCheckbox
正常工作?
答案 0 :(得分:2)
<h:selectBooleanCheckbox ... onclick="submit()">
<f:ajax ... />
</h:selectBooleanCheckbox>
您的具体问题是由ajax复选框上的onclick="submit()"
引起的。去掉它。它触发了form.submit()
,与<f:ajax>
完全冲突。
你也在另一个没有ajax的复选框上使用它,这可能没用,但是你也在“删除行”中使用它?命令按钮完全没必要。它默认情况下已触发表单提交。