我有一个 commandLink,它有一个“渲染”,它是根据 @RequestScoped bean 中的值计算的。commandLink 使用 f:ajax 调用侦听器,但似乎从未执行该方法。
事实证明,如果我设置了 render="#{true}" 或根本没有渲染属性,侦听器就会正确执行。是否有可能因为渲染是基于在 ajax 回发时不再存在的请求范围值(因此导致“错误”),所以正在跳过侦听器?请注意,f:ajax 还执行了一些成功执行的执行操作。
我有一个 commandLink,它有一个“渲染”,它是根据 @RequestScoped bean 中的值计算的。commandLink 使用 f:ajax 调用侦听器,但似乎从未执行该方法。
事实证明,如果我设置了 render="#{true}" 或根本没有渲染属性,侦听器就会正确执行。是否有可能因为渲染是基于在 ajax 回发时不再存在的请求范围值(因此导致“错误”),所以正在跳过侦听器?请注意,f:ajax 还执行了一些成功执行的执行操作。
您永远不应该使用请求范围的 bean 来定义任何 UI 组件的渲染属性的值。除非您特别小心,否则原始 bean 会被销毁并丢失其值,而是会在每次请求时创建一个新 bean。因此,组件将被隐藏,因为渲染的属性值很可能不会为下一个请求评估为 true。
您应该为您的 bean 使用视图范围。请参阅此处的示例,但您应该可以轻松找到搜索类似'jsf rendered attribute request scope bean'
.