加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

当f:ajax被执行时,总是调用JSF2 preRenderComponent

发布时间:2020-12-16 02:54:18 所属栏目:百科 来源:网络整理
导读:我有一个由NewsBean. java支持的JSF页面,它有 f:event type =“preRenderComponent”listener =“#{newsBean.init}”/作为bean初始化器. 页面底部有一个按钮,用于发送评论,其中包含: f:ajax event =“click”execute =“@ form”render =“@ form”listen
我有一个由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().

我的bean范围是视图.这是一个有效的行为(总是调用init())?如何防止始终调用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的快照版本目前已经发布.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读