我在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
答案 0 :(得分:2)
您可能看到的是,托管bean graph
在JSF生命周期的早期实例化,并且仅在APPLY_REQUEST_VALUES
阶段的后期才为托管属性设置了适当的值{{ 1}}。无论范围如何,托管bean都将在每个请求之后重新实例化,因为Web具有固有的无状态特性。
有关更多信息,BalusC有一篇关于调试JSF生命周期的精彩文章,详细介绍了如何实现自定义PhaseListener,以帮助您理解和调试应用程序中的此类行为。