gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 18:25:30 24 4
gpt4 key购买 nike

我有一个复合组件,主要由一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com