如何向JSF自定义组件添加子组件以获得有效的客户端ID?

如何向JSF自定义组件添加子组件以获得有效的客户端ID?,jsf,jsf-2.2,custom-component,mojarra,Jsf,Jsf 2.2,Custom Component,Mojarra,我已经创建了自定义组件和自定义渲染器,它们应该使用其他子组件,如: doEncodeBegin(...){ final HtmlOutcomeTargetLink commandLink = (HtmlOutcomeTargetLink) context.getApplication().createComponent(HtmlOutcomeTargetLink.COMPONENT_TYPE); cmdLink.setId("myLink"); cmdLink.setParent(c

我已经创建了自定义组件和自定义渲染器,它们应该使用其他子组件,如:

doEncodeBegin(...){
  final HtmlOutcomeTargetLink commandLink = (HtmlOutcomeTargetLink) context.getApplication().createComponent(HtmlOutcomeTargetLink.COMPONENT_TYPE);
  cmdLink.setId("myLink");
  cmdLink.setParent(component);
  cmdLink.encodeAll(context);
}
如果自定义组件的ID为“myComp”,则子组件应获得客户端ID“myComp:myLink”

但是,有时(例如在验证阶段)我会收到以下错误消息:“无法添加相同的组件两次”

==>这里的实际问题是什么

尝试过的解决方案-如BalusC所建议:

  • 对组件使用setTransient(true)没有帮助
  • 使用setInView(false)有帮助,但我认为这也不是一个有效的解决方案