1

有没有人有这样的问题的解决方案:

在我的应用程序中,我使用了一个基于 primefaces 仪表板的复杂的、以编程方式构建的仪表板。为了克服构建仪表板的面板的非唯一 ID 的问题,我将此组件绑定到请求范围的 bean。单击命令按钮后,我还想根据一些可变参数重建仪表板。

问题是,仪表板的 getter 在 Apply Request Values 阶段被触发,在 commandButton 的 actionListener 被触发之前(在 Invoke Application 阶段)。因此,尽管仪表板最终会重建,但它并没有在呈现的响应中刷新。

另一方面,如果我尝试将按钮的即时属性设置为 true,则 actionListener 在 Apply Request Values 阶段被触发,但仍在 getter 之后。比生命周期直接进入渲染响应阶段,结果是一样的。

任何人?


谢谢你的回答。让我为我的问题添加一些细节。

我将体育比赛的模型存储为会话范围 bean 的属性。它是这样的:bean 有一个属性“比赛”。这个类有一个组列表,每个组都有它的匹配表。这个想法是使用三个不同的程序构建组件作为这个锦标赛模型的渲染器。

仪表板将用于参赛者分组放置的拖放版。为了查看比赛表格和编辑他们的比赛,我使用了一个标签面板,每个表格都有面板网格。最后,我使用面板网格来显示锦标赛树。这三个组件中的每一个都呈现模型的某些部分供用户编辑。

由于模型(以及因此那些渲染组件)是根据可选参数(例如组数)动态构建的,因此在将它们绑定到会话范围的 bean 时,我遇到了 id uniqnes 的问题。所以我将它们绑定到一个请求范围的bean。随着每个请求更改模型(主要是 ajax),我想根据用户设置的参数(也存储在会话范围的 bean 中)重新渲染这些组件。

问题是,当我在调用应用程序阶段(在由“rebuild-my-model”按钮触发的动作侦听器中)重建模型时,绑定到请求范围 bean 的组件已经被“get-ed”来自 bean(或者看起来如此),并且它们不会在页面上刷新。

如果上面提到的方法完全愚蠢的话,我将非常感谢我做错了什么的线索,也许还有一个建议:)

4

1 回答 1

1

问题是,仪表板的 getter 在应用请求值阶段被触发,在 commandButton 的 actionListener 被触发之前

我不确定为什么这对你来说是个问题。也许您在 getter 方法而不是在动作侦听器方法中错误地执行业务逻辑?或者您可能是手动创建组件而不是引用 JSF 创建的组件,因此总是覆盖 JSF 视图中的组件?

一个合适的 JSF getter 方法基本上如下所示:

public UIComponent getDashboard() {
    return dashboard;
}

它不应包含任何其他代码行。顺便说一句,这同样适用于 setter 方法。任何需要操作组件子级的操作都需要在 action(listener) 方法中完成,而不是在 getter/setter 方法中。

于 2012-08-03T12:29:59.880 回答