jsf - 使用转换器时如何在复合组件中引用组件

标签 jsf jsf-2 facelets composite-component

我有一个复合组件,主要由一个 selectManyCheckbox 组件组成。因为它应该以通用方式设计,所以我使用

从调用级别传入 selectItems、ajax 处理等
<composite:insertChildren/>

这对大部分内容都非常有效。现在我需要将这个复合组件与转换器一起使用。由于并不总是需要转换器(一种 Omnifaces 的 ListConverter)(有时我想要支持选择项的具体实体的值绑定(bind),有时我不需要),我想传递它in 作为前面提到的部分(例如 selectItems,ajax 事件处理)。

鉴于此,有必要使用转换器标签的“for”属性来引用复合组件内的组件。至少我是这么理解的。

不幸的是,我不知道应该使用什么值。我是否必须包含复合组件的名称(命名容器)?我必须使用 clientId 吗?我尝试了很多组合,但尚未调用转换器。只要我将转换器标签放入复合组件定义中,它就会起作用。

为了让事情更简单,让我们假设我有以下内容:

<composite:interface>
   <composite:attribute name="value" required="true"/>
</composite:interface>

<composite:implementation>
   [...]
   <h:selectManyCheckbox id="#{cc.attrs.id}" value="#{cc.attrs.value}">
        <composite:insertChildren/>
   </h:selectManyCheckbox>
   [...]
</composite:implementation>

该组件应按如下方式使用:

<my:selectManyCheckbox id="myComponent" value="...">
   <f:selectItems value="..."/>
   <o:converter for="___" converterId="..."/>
</my:selectManyCheckbox>

也许有人可以给我提示应该为“for”属性赋予什么值。

最佳答案

我自己找到了答案。您可以使用以下内容

<composite:interface>
    <composite:attribute name="value" required="true"/>
    <composite:editableValueHolder name="input_component">
</composite:interface>

<composite:implementation>
    [...]
    <h:selectManyCheckbox id="input_component" value="#{cc.attrs.value}">
        <composite:insertChildren/>
    </h:selectManyCheckbox>
    [...]
</composite:implementation>

重要的部分是 editableValueHolder 标签。从使用这个复合组件的页面,您现在可以使用

<o:converter for="input_component" converterId="id_of_converter" />

这是适合我的解决方案。我希望这可以帮助其他遇到同样问题的人。

关于jsf - 使用转换器时如何在复合组件中引用组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38919946/

相关文章:

JSF 从 HTTPS 重定向到 HTTP

css - 如何删除 p :commendlink? 中的边框

html - Primefaces 数据表 colspan 列宽 - 不工作

jsf - :commandButton not working inside h:dataTable

java - JSF ajax 更新行为

jsf - 在 JSF 2.0 中创建托管 bean 的多个实例的正确方法是什么

java - 如何使用 Richfaces 构建复选框树?

jsf - 如何加载和显示依赖 h :selectOneMenu on change of a h:selectOneMenu

Ajax Listener 事件 valueChange 似乎触发了 onClick 而不是 onChange

java - PrimeFaces 3.2 中的标签库