<a4j:commandbutton> 操作仅在第二次单击时调用
Posted
技术标签:
【中文标题】<a4j:commandbutton> 操作仅在第二次单击时调用【英文标题】:<a4j:commandbutton> action is only invoked on second click 【发布时间】:2012-04-23 02:09:04 【问题描述】:我想在单击按钮时提交数据表,但在第一次单击时不会调用该操作。这是我的代码:
<h:panelGrid id="addToThisDepartmentPanel">
<h:outputText value="#messageDataBean.message" rendered="#messageDataBean.isSuccess eq false" style="color:red" id="addToThisDepartmentMessage"/>
<h:form>
<h:dataTable value="#systemResultViewUtil.systemUserDetailDataBeansList" var="departmentdetail" id="addToThisDepartmentDataTable" rendered="#systemResultViewUtil.systemUserDetailDataBeansList.size() gt 0">
<h:column>
<f:facet name="header">
Name
</f:facet>
<h:outputText value="#departmentdetail.name" style="text-align: left;padding-right: 120px" />
</h:column>
<h:column>
<f:facet name="header">
Current Department
</f:facet>
<h:outputText value="#departmentdetail.depName" style="text-align: left;padding-right: 120px" />
</h:column>
<h:column>
<f:facet name="header">
Add To This
</f:facet>
<h:selectBooleanCheckbox value="#departmentdetail.cheked" style="text-align: left;padding-right: 120px"/>
</h:column>
</h:dataTable>
<a4j:commandButton oncomplete="if(#messageDataBean.isSuccess eq true) closeAddToThisDepartmentDialog()" value="Add TO This Department" action="#departmentServiceBean.addEmployeeToThisDepartment" id="addToThisDepartmentButton"
render=":addToThisDepartmentMessage :message" execute=":addToThisDepartmentDataTable" />
</h:form>
</h:panelGrid>
问题是第二次点击我的<a4j:commandButton>
动作被调用。但它不会在第一次点击时被调用。
有什么想法吗?
【问题讨论】:
为了排除一个和另一个,<h:panelGrid>
是否事先被另一种 ajax 表单重新渲染?
嗯,我可以假设答案是“是”吗?如果不是这样,我不想浪费时间写答案。
BalusC 帮助...我是 JSF 新手
对我第一条评论中的问题回答“是”或“否”即可。
是的 这个问题被称为JSF spec issue 790。如果您对某些内容进行 ajax 渲染,而这些内容又包含 <h:form>
,则其视图状态将丢失,这将导致该表单内的第一个操作不会调用任何内容。在第一个动作的 ajax 响应中,表单将获得新的视图状态,因此任何后续动作都会成功。
计划在即将到来的 JSF 2.2 中修复此问题。但是现在使用 JSF 2.0/2.1,您必须引入一种解决方法。你首先需要给<h:form>
一个固定的ID,在下面的例子中是yourFormId
:
<h:panelGrid id="addToThisDepartmentPanel">
...
<h:form id="yourFormId">
...
那么你还需要在render
属性中引用它:
<f:ajax ... render=":addToThisDepartmentPanel :yourFormId" />
同样的情况也适用于<a4j:xxx>
组件。
<a4j:commandButton ... render=":addToThisDepartmentPanel :yourFormId" />
另见:
h:commandButton/h:commandLink does not work on first click, works only on second click Communication in JSF 2.0 - Ajax rendering of content which contains another form【讨论】:
render属性值中是否需要冒号? 由于某种原因这对我不起作用以上是关于<a4j:commandbutton> 操作仅在第二次单击时调用的主要内容,如果未能解决你的问题,请参考以下文章
标签 <q>、<abbr>、<defn>、<ins>、<del> 和 <s> 的正确用法是啥? [关闭]
<em> 中的 <strong> 或 <strong> 中的 <em> 重要吗?
将 Single<List<Maybe<Book>>> 转换为 Single<List<Book>>