在encodeBegin中创建的JSF组件在解码中不可见

时间:2013-01-07 09:49:00

标签: jsf-2 primefaces custom-component

  

可能重复:
  Primefaces commandButton in custom component action listener not called

我创建了扩展UIComponentBase的自定义组件。我正在创造 encodeBegin中的某些组件(来自Primefaces的CommandButton),但何时 当我查找按钮时,用户单击按钮会触发decode 存在于UIViewRoot而非this.getChildren()

decode被触发并且组件不存在时,它似乎是一个新的组件实例。 有什么问题?

有些代码在: code

如果您愿意,我可以发送完整的代码。


我发现这种技术在PrimeFaces和其他软件中使用,但你能解释为什么从getStateHelper()。eval(“someKey”)中检索到的值;在解码中总是为空?

我的网站可能存在问题,但我无法解决?

这是我开始的主题的链接:

problem description in more details

1 个答案:

答案 0 :(得分:1)

  

似乎它是一个新的组件实例,当解码被触发并且组件不存在时调用它。

这是对的。组件实例不存储在视图状态中。相反,组件的状态存储在视图状态中。组件的状态可以由StateHelper提供的帮助程序类UIComponent#getStateHelper()进行管理。

所以,在编码期间执行:

// ...
getStateHelper().put("someKey", someKey);

在解码期间执行:

SomeKey someKey = (SomeKey) getStateHelper().eval("someKey");
// ...

另见: