JSF 2.0 f:当控制器是请求范围时,不调用ajax监听器

时间:2012-07-27 01:46:00

标签: spring jsf jsf-2

我面临着JSF2.0 Ajax Tag非常奇怪的问题。以下是导致我出现问题的步骤

  1. 我的项目使用JSF2.0和Spring 3.0。 JSF连接到弹簧控制器,生命周期由Spring管理。
  2. 我的控制器是Request Scoped。
  3. 到目前为止一切正常

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

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

    1. bean被重新信号化,因为它是请求范围。我看到我的postconstruct被执行。
    2. 我在客户端的数据对象中看到成功消息。
    3. 唯一缺少的是没有调用侦听器方法。

      无论如何都要调试生命周期并找出问题所在?

1 个答案:

答案 0 :(得分:1)

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

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

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

另见: