在页面加载

时间:2017-05-05 13:11:16

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

PrimeFaces 5.0, JSF 2.2, Glassfish 4.1.1,

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

所以我使用managedbeans来支持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()方法...

1 个答案:

答案 0 :(得分:1)

oncomplete是一个客户端javascript回调。在呈现页面时会调用您的方法,因为服务器会评估那些希望它们生成带有javascript代码的字符串的EL表达式。

您可能根本不需要这些不完整的处理程序。对于登录按钮,动作处理程序应该足够了。对于fileUpload,如果您的目标只是按方法名称建议“提取”上传的文件,则fileUploadListener可能就足够了。