页面加载时调用 PrimeFaces oncomplete 支持方法

标签 primefaces jsf-2 java-ee-7 glassfish-4.1

PrimeFaces 5.0, JSF 2.2, Glassfish 4.1.1,

我假设我的设置中的某些内容未正确配置,但我不确定要查看什么...

所以我使用托管bean 来支持JSF 页面。在页面上的 PrimeFace 元素中,如果我使用 oncomplete 属性,则会在页面加载时调用它引用的方法。我不希望它在每个页面加载时调用该方法,而且我不认为应该这样做!

我已经通过几个页面和不同的元素对此进行了测试。 我第一次注意到这个问题是通过 <p:fileupload>一旦所有文件上传完毕,我试图使用 oncomplete 调用一个方法。 我随后在 <p:commandbuttons> 上尝试过此操作并且在页面加载时调用 oncomplete。

我检查了生成的 HTML,有一个格式正确的 <head>标签对。

我还完成了对生成的 HTML 存在和不存在 oncomplete 属性的比较。

与:

<button id="j_idt21:j_idt26" 
    name="j_idt21:j_idt26" 
    class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only"
    onclick="PrimeFaces.ab({s:'j_idt21:j_idt26',onco:function(xhr,status,args){;}});
    return false;" 
    type="submit">`

没有:

<button id="j_idt21:j_idt26" 
    name="j_idt21:j_idt26" 
    class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" 
    onclick="PrimeFaces.ab({s:'j_idt21:j_idt26'});
    return false;" 
    type="submit">

下面是上述 HTML 的代码,显示 oncomplete 会在加载任何页面时调用该页面上的方法。这是我的登录页面。

<p:commandButton validateClient="true" value="Login" 
    action="#{loginJSFManagedBean.validateCredentials}" 
    type="submit" 
    ajax="true" 
    oncomplete="#{loginJSFManagedBean.validateCredentials}">
</p:commandButton>

每次加载登录页面时,都会调用 validateCredentials 方法,甚至在页面完成渲染之前...

这是我的文件上传的 JSF 片段:

<h:form enctype="multipart/form-data">
<p:fileUpload oncomplete="#{JSFManagedBean.extract()}" 
fileUploadListener="#{JSFManagedBean.handleTarFileUpload}" 
mode="advanced"  ></p:fileUpload>
</h:form>

每次页面加载时都会调用 extract() 方法...

最佳答案

oncomplete 是客户端 JavaScript 回调。当页面呈现时,您的方法就会被调用,因为服务器会计算那些 EL 表达式,期望它们生成包含要发送的 javascript 代码的字符串。

您可能根本不需要这些 oncomplete 处理程序。对于登录按钮,操作处理程序应该足够了。对于 fileUpload,如果您的目标只是像方法名称所暗示的那样“提取”上传的文件,那么 fileUploadListener 可能就足够了。

关于页面加载时调用 PrimeFaces oncomplete 支持方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43805864/

相关文章:

events - JSF f :event preRenderView in template f:metadata, 每次访问页面时都不会调用监听器

ajax - f :ajax action method is not invoked

jakarta-ee - java.lang.NullPointerException at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java :272) while accessing JAX-WS services

java - 如何在 JPA 中正确保持多对多关系

jsf-2 - Primefaces 命令按钮不更新数据表

css - PrimeFaces p :selectOneMenu width

html - JSF/PrimeFaces 与 HTML5 存储方法的兼容性

java - 如何动态编辑 HTML 文件的内容

javascript - 将数据从 Java/JSF2 bean 传递到 Javascript/jQuery 组件作为返回值的最佳方法

Java EE 7 Json.createBuilderFactory(config) - 您可以使用非空配置做什么?