Javascript Ajax+;JSF在第一次单击后单击2次
我有一个dataTable,它有一个名为DELETE的列(它是一个链接),该列有一个侦听器。当我第一次单击它(单击1)时,它会删除该行(如预期的那样),但当我尝试使用另一行时,之后什么也没有发生(单击2)。事实上,无论我在哪里单击“下一步”,都不会发生任何事情。我应该再单击一次(单击3)以使其正常工作。我不想那样 注意:在“单击2”之后,my_用户中的“delete()”方法未到达 以下是该列的代码:Javascript Ajax+;JSF在第一次单击后单击2次,javascript,ajax,jakarta-ee,jsf-2,Javascript,Ajax,Jakarta Ee,Jsf 2,我有一个dataTable,它有一个名为DELETE的列(它是一个链接),该列有一个侦听器。当我第一次单击它(单击1)时,它会删除该行(如预期的那样),但当我尝试使用另一行时,之后什么也没有发生(单击2)。事实上,无论我在哪里单击“下一步”,都不会发生任何事情。我应该再单击一次(单击3)以使其正常工作。我不想那样 注意:在“单击2”之后,my_用户中的“delete()”方法未到达 以下是该列的代码: <h:column> <f:facet name="header"&
<h:column>
<f:facet name="header">#{lng.del}</f:facet>
<h:form>
<h:commandLink action="#">
<f:ajax event="click" listener="#{my_user.delete}" render="@all" />
<h:graphicImage name="delete.png" library="images" styleClass="tableIcon" />
</h:commandLink>
</h:form>
</h:column>
#{lng.del}
表中有多个表单。当您使用ajax从表单内部重新呈现另一个表单时,其视图状态将丢失,因此第一次单击将失败。但是,此单击会确保表单返回视图状态,因此第二次单击有效
从技术上讲,您只需要重新呈现其他表单的内容,但在这个特定的用例中,这是不可能的。最好将
放在
之外,这样您就有了一个具有共享视图状态的表单
<h:form>
<h:dataTable>
...
</h:dataTable>
</h:form>
...
如果您的页面还包含其他表单,我建议只呈现当前表单而不是全部表单,否则这些表单上的任何操作也将失败
<f:ajax event="click" listener="#{my_user.delete}" render="@form" />
Thnks以获取解释。非常有用!在我将onevent=“confirmRemoving()”添加到之前,它工作得非常好。函数的位置为:function confirmRemoving(){return confirm('您确定要删除此行吗?');}同样的情况也发生了。下次我尝试删除时需要2次单击。你认为现在会发生什么?嗯。。真奇怪。当我将onClick添加到commandLink-。。。它很有效。它和普通javascript不一样吗?例如:event=“click”onevent=“function()”类似于onclick=“function()”?不,绝对不是。您需要单击onclick
。在Ajax请求生命周期中,
被调用3次。它为Ajax请求生命周期的开始、成功和完成事件提供了一个钩子。例如,显示和隐藏进度条或报告Ajax状态。请不要将其与组件的onclick
混淆。我强烈建议在继续使用JSF之前先学习一些基本的HTML/JS。