Moh*_*sen 5 ajax jsf initializer postconstruct jsf-2
我有一个由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()?
Bal*_*usC 10
一个preRender听者总是调用预先渲染的事件,不管它是一个初始请求或回发请求.每个请求都有一个呈现响应阶段,无论它是普通请求还是ajax请求.所以这种行为是通过规范.如果它是回发请求,您需要通过检查来检查自己的侦听器方法FacesContext#isPostback().
public void sendComment() {
if (!FacesContext.getCurrentInstance().isPostback()) {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
对于在初始请求上处理视图参数后能够调用bean操作方法的功能要求,<f:event type="preRenderXxx">(其中Xxx可以是View或者Component)实质上是一种"变通方法".在即将推出的JSF 2.2中,<f:viewAction>将引入一个新的标签,它应该完全符合预期的工作:
<f:viewAction action="#{newsBean.sendComment}" />
Run Code Online (Sandbox Code Playgroud)
此标记支持onPostback已默认为的属性false:
<f:viewAction action="#{newsBean.sendComment}" onPostback="false" />
Run Code Online (Sandbox Code Playgroud)
JSF 2.2将于2012年第一季度发布.JSF 2.2的快照版本目前已经发布.
| 归档时间: |
|
| 查看次数: |
9906 次 |
| 最近记录: |