我有一个由NewsBean.
java支持的JSF页面,它有< f:event type =“preRenderComponent”listener =“#{newsBean.init}”/>作为bean初始化器.
页面底部有一个按钮,用于发送评论,其中包含:
< f:ajax event =“click”execute =“@ form”render =“@ form”listener =“#{newsBean.sendComment}”/>并被< h:form>包围.单击按钮时,始终会调用NewsBean.init().
解决方法
无论是初始请求还是回发请求,都会在预呈现事件上调用preRender侦听器.每个请求都有一个呈现响应阶段,无论它是普通请求还是ajax请求.所以这种行为是通过规范.如果是回发请求,则需要通过检查
FacesContext#isPostback()
来检查自己的侦听器方法.
public void sendComment() { if (!FacesContext.getCurrentInstance().isPostback()) { // ... } }
< f:event type =“preRenderXxx”> (其中Xxx可以是View或Component)在本质上是一种“变通方法”,用于在初始请求上处理视图参数后能够调用bean操作方法的功能要求.在即将到来的JSF 2.2中,新的< f:viewAction>将引入标签,该标签应该完全符合预期的工作:
<f:viewAction action="#{newsBean.sendComment}" />
此标记支持onPostback属性,该属性已默认为false:
<f:viewAction action="#{newsBean.sendComment}" onPostback="false" />
JSF 2.2将于2012年第一季度发布.JSF 2.2的快照版本目前已经发布.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。