Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ajax+;JSF在第一次单击后单击2次_Javascript_Ajax_Jakarta Ee_Jsf 2 - Fatal编程技术网

Javascript Ajax+;JSF在第一次单击后单击2次

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"&

我有一个dataTable,它有一个名为DELETE的列(它是一个链接),该列有一个侦听器。当我第一次单击它(单击1)时,它会删除该行(如预期的那样),但当我尝试使用另一行时,之后什么也没有发生(单击2)。事实上,无论我在哪里单击“下一步”,都不会发生任何事情。我应该再单击一次(单击3)以使其正常工作。我不想那样

注意:在“单击2”之后,my_用户中的“delete()”方法未到达

以下是该列的代码:

<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。