【发布时间】:2017-10-03 23:45:14
【问题描述】:
PrimeFaces 5.0, JSF 2.2, Glassfish 4.1.1,
我假设我的设置中的某些内容配置不正确,但我不确定要查看什么...
所以我使用 managedbeans 来支持 JSF 页面。如果我使用 oncomplete 属性,则在页面上的 PrimeFace 元素中,它引用的方法会在页面加载时调用。我不希望它在每个页面加载时调用该方法,我不相信它应该是!
我已经通过几个页面和不同的元素对此进行了测试。
我首先注意到<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 的 sn-p:
<h:form enctype="multipart/form-data">
<p:fileUpload oncomplete="#{JSFManagedBean.extract()}"
fileUploadListener="#{JSFManagedBean.handleTarFileUpload}"
mode="advanced" ></p:fileUpload>
</h:form>
每次页面加载时都会调用 extract() 方法...
【问题讨论】:
-
在文档中的什么地方声明“oncomplete”能够在“执行”时调用 java 服务器端方法?
-
您尝试在按钮上执行的操作可能是先执行 actionListener,然后执行操作。对于文件上传,您可以执行 stackoverflow.com/questions/26696922/… 或 stackoverflow.com/questions/20747201/…
标签: primefaces jsf-2 java-ee-7 glassfish-4.1