gpt4 book ai didi

jsf - 如何通过其接口(interface)定义复合内部中继器的内容?

转载 作者:行者123 更新时间:2023-12-04 13:54:46 26 4
gpt4 key购买 nike

我有一个带有 ui:repeat 的复合组件,我想通过复合接口(interface)定义 ui:repeat 的内容。

以下代码在 MyFaces 中有效,但看起来更像是一个 hack,因为变量名 varRepeat 必须在 composite 之外已知,并且只有在没有提供其他应在其他地方呈现的子项时才有效。

查看

定义 ui:repeat

的内容
<comp:myRepeater value="#{of:createIntegerArray(1,5)}">
<h:outputText id="varComp" value="#{varRepeat}"/>
</comp:myRepeater>

复合 myRepeater

<composite:attribute name="value" type="java.lang.Object"/>
<composite:implementation>
<ui:repeat var="varRepeat" value="#{cc.attrs.value}">
<composite:insertChildren/>
</ui:repeat>
</composite:implementation>

最佳答案

考虑到var,这是你能得到的最好的属性不支持 EL。为了让最终用户清楚,请记录 var 的名称在 <cc:interface shortDescription>和/或 <cc:attribute shortDescription> .

<cc:interface>
<cc:attribute name="value" type="java.util.Collection"
shortDescription="A collection of items. Each item is exposed in EL under the variable name 'item'." />
<cc:interface>
<cc:implementation>
<ui:repeat value="#{cc.attrs.value}" var="item">
<cc:insertChildren />
</ui:repeat>
</cc:implementation>

用法:

<my:repeat value="#{bean.list}">
<h:outputText value="#{item}" />
</my:repeat>

OmniFaces showcase application长期也有类似的组合: <os:listDocs> :

<cc:implementation>
<c:set var="docs" value="#{page.current.documentation[cc.attrs.paths]}" />
<ui:fragment rendered="#{not empty docs}">
<h3>#{cc.attrs.header}</h3>
<ul>
<ui:repeat value="#{docs}" var="path">
<li><a href="#{cc.attrs.url}"><code>#{cc.attrs.label}</code></a></li>
</ui:repeat>
</ul>
</ui:fragment>
</cc:implementation>

Usage :

<os:listdocs header="VDL" paths="vdl" url="#{_vdlURL}#{path}.html" label="#{fn:replace(path,'/', ':')}" />
<os:listdocs header="API" paths="api" url="#{_apiURL}#{path}.html" label="#{fn:replace(path,'/', '.')}" />
<os:listdocs header="Source code" paths="api" url="#{_srcURL}#{path}.java" label="#{fn:replace(path,'/', '.')}" />

作为设计提示,如果您为集合使用合理的属性名称,var可能会变得更加 self 记录。例如。求items作为值(value)并提供 var="item" .

<my:repeat items="#{[1,2,3,4,5]}">
<h:outputText value="#{item}"/>
</my:repeat>

关于jsf - 如何通过其接口(interface)定义复合内部中继器的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32302211/

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