f:由于render =“false”而没有执行ajax监听器?

时间:2012-12-03 08:28:20

标签: jsf

我有一个commandLink,它有一个“render”,它是根据@RequestScoped bean中的值计算的。 commandLink使用f:ajax来调用侦听器,但似乎永远不会执行该方法。

事实证明,如果我设置了render =“#{true}”或根本没有渲染属性,则会正确执行侦听器。是否有可能因为渲染是基于请求范围的值,这些值在ajax回发时不再存在(因此导致'false'),是否正在跳过侦听器?请注意,f:ajax还执行一些成功执行的执行操作。

1 个答案:

答案 0 :(得分:2)

您永远不应该使用请求范围的bean来定义任何UI组件的呈现属性的值。除非你特别小心,否则原始bean会因为丢失其值而被销毁,而是为每个请求创建一个新bean。因此,组件将被隐藏,因为渲染的属性值很可能在下一个请求时未被评估为true。

您应该使用视图范围代替您的bean。请参阅示例here,但您应该很容易找到其他搜索'jsf rendered attribute request scope bean'之类的示例。