执行f:ajax时始终调用JSF2 preRenderComponent

执行f:ajax时始终调用JSF2 preRenderComponent,ajax,jsf,jsf-2,initializer,postconstruct,Ajax,Jsf,Jsf 2,Initializer,Postconstruct,我有一个由NewsBean.java支持的JSF页面,它具有作为bean初始值设定项 页面底部有一个用于发送评论的按钮,该按钮具有: 并被一个包围。单击按钮时,始终调用NewsBean.init() 我的bean范围是视图。这是一种有效的行为(总是调用init())吗?如何防止总是调用init()?我猜您的标记被放在标记中。因此,当您单击ajax按钮时,它会重新呈现整个组件,从而再次触发preRenderComponent事件 我认为您应该使用的是。无论是初始请求还是回发请求,都会在预渲染事件中

我有一个由NewsBean.java支持的JSF页面,它具有
作为bean初始值设定项

页面底部有一个用于发送评论的按钮,该按钮具有:
并被一个
包围。单击按钮时,始终调用
NewsBean.init()

我的bean范围是视图。这是一种有效的行为(总是调用init())吗?如何防止总是调用
init()

我猜您的
标记被放在
标记中。因此,当您单击ajax按钮时,它会重新呈现整个
组件,从而再次触发preRenderComponent事件


我认为您应该使用的是。

无论是初始请求还是回发请求,都会在预渲染事件中调用
预渲染
侦听器。无论是普通请求还是ajax请求,每个请求都有一个呈现响应阶段。因此,这种行为是由规范决定的。如果是回发请求或不是回发请求,则需要通过检查在侦听器方法中检查自己

(其中
Xxx
可以是
视图
组件
)本质上是一种“变通方法”,用于满足在初始请求处理视图参数后能够调用bean操作方法的功能需求。在即将发布的JSF 2.2中,将引入一个新的
标记,它应该完全按照预期完成工作:

<f:viewAction action="#{newsBean.sendComment}" />

JSF2.2将于2012年第一季度发布。JSF2.2的快照版本目前已经发布。

谢谢BalusC。完美的答案,一如既往。
<f:viewAction action="#{newsBean.sendComment}" />
<f:viewAction action="#{newsBean.sendComment}" onPostback="false" />