JSF selectOneButton with ajax update - setter 2次调用

时间:2012-07-16 06:41:04

标签: java ajax jsf-2 primefaces

我在WebSphere Application Server 8上使用Primefaces 3.2和ApacheMyfaces。

我有一个带有ajax更新的selectOneButton。 当我切换按钮时,我的setter firsts将值(int)设置为0,然后设置为所选的值:

<p:selectOneButton value="#{graph.view}" id="view">
    <f:selectItem itemLabel="W" itemValue="1" />
    <f:selectItem itemLabel="M" itemValue="2" />
    <f:selectItem itemLabel="Y" itemValue="3" />
    <p:ajax event="change" update=":optform:datecol"/>
</p:selectOneButton>

datecol是我的表单中的另一个selectComponent(optform)。

为什么JSF首先将值设置为0然后再设置为2?

它是PrimeFaces selectOneButton Bug。请参阅我的问题here

最诚挚的问候 Veote

1 个答案:

答案 0 :(得分:2)

您可能看到的是,托管bean graph在JSF生命周期的早期实例化,并且仅在APPLY_REQUEST_VALUES阶段的后期才为托管属性设置了适当的值{{ 1}}。无论范围如何,托管bean都将在每个请求之后重新实例化,因为Web具有固有的无状态特性。

有关更多信息,B​​alusC有一篇关于调试JSF生命周期的精彩文章,详细介绍了如何实现自定义PhaseListener,以帮助您理解和调试应用程序中的此类行为。

http://balusc.blogspot.com/2006/09/debug-jsf-lifecycle.html