可能重复:
Primefaces commandButton in custom component action listener not called
我创建了扩展UIComponentBase
的自定义组件。我正在创造
encodeBegin
中的某些组件(来自Primefaces的CommandButton
),但何时
当我查找按钮时,用户单击按钮会触发decode
存在于UIViewRoot
而非this.getChildren()
。
当decode
被触发并且组件不存在时,它似乎是一个新的组件实例。
有什么问题?
有些代码在: code
如果您愿意,我可以发送完整的代码。
我发现这种技术在PrimeFaces和其他软件中使用,但你能解释为什么从getStateHelper()。eval(“someKey”)中检索到的值;在解码中总是为空?
我的网站可能存在问题,但我无法解决?
这是我开始的主题的链接:
答案 0 :(得分:1)
似乎它是一个新的组件实例,当解码被触发并且组件不存在时调用它。
这是对的。组件实例不存储在视图状态中。相反,组件的状态存储在视图状态中。组件的状态可以由StateHelper
提供的帮助程序类UIComponent#getStateHelper()
进行管理。
所以,在编码期间执行:
// ...
getStateHelper().put("someKey", someKey);
在解码期间执行:
SomeKey someKey = (SomeKey) getStateHelper().eval("someKey");
// ...