2012-08-03 87 views
0

有没有人有这样的问题的解决方案:刷新组件绑定到请求范围豆

在我的应用我使用的是复杂的,基于该primefaces仪表编程方式创建仪表盘。为了克服构建仪表板的面板的非唯一标识符的问题,我将这个组件绑定到一个请求范围的bean。我还想在点击一个commandButton之后基于一些可变参数重新构建仪表板。

问题是,在应用程序请求值阶段触发仪表板的getter,在commandButton的actionListener被触发之前(在调用应用程序阶段)。所以,尽管仪表板最终会重建,但它并不会在呈现的响应中刷新。另一方面,如果我尝试将按钮的即时属性设置为true,actionListener会在Apply Request Values阶段触发,但仍然在getter之后。比生命周期直接进入渲染响应阶段,结果是一样的。

有人吗?


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

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

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

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

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

我将是一个线索,我做错了什么,也许一个建议,如果上面提到的方法是completelly愚蠢:)

+0

问题解决了,感谢BalusC。这个想法是为每个请求设置组件的新模型,而不是试图手动创建并在代码中替换它们。 – user1573280 2012-08-06 08:10:17

回答

1

的问题是非常gratefull,吸气剂的仪表盘在应用请求值阶段是CommandButton的ActionListener之前触发,这样被激发

我不知道到底为什么,形成你的问题。也许你错误地在getter方法中而不是在action listener方法中做业务逻辑?或者你可能是手动创建组件而不是引用JSF创建的组件,因此总是覆盖JSF视图中的组件?

一个适当的JSF getter方法基本上是这样的:

public UIComponent getDashboard() { 
    return dashboard; 
} 

应该包含的代码的任何其他线路。顺便说一句,这同样适用于setter方法。您需要操作组件的子项的任何操作都需要在操作(侦听器)方法中完成,而不是在getter/setter方法中完成。