JSF 2.0 f:ajax侦听器在控制器处于请求范围时不会被调用



我在使用JSF2.0 Ajax标记时遇到了一个非常奇怪的问题。以下是导致我出现问题的步骤

  1. 我的项目使用了JSF2.0和Spring3.0。JSF连接到spring控制器,生命周期由spring管理
  2. 我的控制器已被请求范围化

到目前为止一切都很好

我有一个selectOne下拉列表,在下拉列表中选择一个值时,它会渲染屏幕底部的另一个下拉列表。我使用父面板组上的渲染属性来显示和隐藏此下拉列表。

然而,对于新呈现的值选择下拉列表,ajax侦听器(F:ajax标记在其中定义)不会被调用。我看到以下情况正在发生

  1. bean被重新认证为请求范围。我看到我的后构造被执行了
  2. 我在客户端的数据对象中看到了成功消息

唯一缺少的是没有调用侦听器方法。

有没有办法调试生命周期并找出问题所在?

如果<f:ajax>的父组件之一的rendered属性在处理ajax请求期间评估false,则不会调用ajax操作侦听器。

每个请求都会重新创建一个请求范围的bean,因此它的所有属性都将重新设置为默认值,除非在(post)构造函数中进行了初始化。如果rendered属性后面的属性没有根据一些请求参数正确地重新初始化,那么它将像初始请求一样评估false

要修复它,您需要根据请求参数在bean(post)构造函数中进行适当的初始化,或者只将bean放在JSF视图范围中。

另请参阅:

  • 如何选择正确的bean作用域
  • commandButton/commandLink/ajax-action/listaner方法未调用或输入值未更新

最新更新