【问题标题】:Adding composite component programmatically以编程方式添加复合组件
【发布时间】:2014-08-16 02:33:17
【问题描述】:

我想以编程方式包含以下复合组件:

<composite:interface>
    <composite:attribute name="sampleBean" />
    <composite:attribute name="autoCompleteMethod"
        method-signature="java.util.List autoCompleteMethod(java.lang.String)" />
</composite:interface>

Omnifaces中有一个函数:

// Programmatically include composite component.
Components.includeCompositeComponent(someParentComponent, libraryName, resourceName, id);

但是,我不清楚如何在获得的 UIComponent 实例中指定autoCompleteMethod。我怎样才能做到这一点?

【问题讨论】:

    标签: jsf composite-component omnifaces


    【解决方案1】:

    includeCompositeComponent() 返回一个代表复合实现的 UIComponent 实例。

    UIComponent composite = Components.includeCompositeComponent(someParentComponent, libraryName, resourceName, id);
    

    它的所有属性都可以通过UIComponent#getAttributes()Map 的形式使用。

    Map<String, Object> attributes = composite.getAttributes();
    

    您可以使用Components#createMethodExpression() 创建EL 方法表达式。假设您打算指定#{bean.complete},下面是一个示例:

    MethodExpression autoCompleteMethod = Components.createMethodExpression("#{bean.complete}", List.class, String.class);
    

    现在,只需将其设置为属性!

    attributes.put("autoCompleteMethod", autoCompleteMethod);
    

    【讨论】:

      猜你喜欢
      • 2015-03-11
      • 2013-04-09
      • 1970-01-01
      • 2013-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-16
      • 1970-01-01
      相关资源
      最近更新 更多