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()方法...
答案 0 :(得分:1)
oncomplete是一个客户端javascript回调。在呈现页面时会调用您的方法,因为服务器会评估那些希望它们生成带有javascript代码的字符串的EL表达式。
您可能根本不需要这些不完整的处理程序。对于登录按钮,动作处理程序应该足够了。对于fileUpload,如果您的目标只是按方法名称建议“提取”上传的文件,则fileUploadListener可能就足够了。