gpt4 book ai didi

java - JSF 复合组件和 selectItems

转载 作者:行者123 更新时间:2023-11-30 09:48:19 25 4
gpt4 key购买 nike

我一直在研究复合组件,但遇到了一些我无法理解的问题。如果不使用复合组件,我会得到这样的东西:

<h:outputText value="Some Label:"/>
<h:selectOneMenu">
<f:selectItem itemLabel="Item 1"/>
<f:selectItem itemLabel="Item 2"/>
<f:selectItem itemLabel="Item 3"/>
</h:selectOneMenu>

我基本上将该片段变成了复合组件:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:composite="http://java.sun.com/jsf/composite">

<!-- INTERFACE -->
<composite:interface>
<composite:attribute name="label" required="true"/>
<composite:attribute name="options" required="true"/>
</composite:interface>

<!-- IMPLEMENTATION -->
<composite:implementation>
<h:outputText value="#{cc.attrs.label}"/>
<h:selectOneMenu style="width:140px;">
<f:selectItem value="#{cc.attrs.options}" />
</h:selectOneMenu>
</composite:implementation>
</html>

现在这就是我难住的地方。我知道我可以将我想在组件中使用的项目列表放在支持 bean 中并像这样使用它:

<util:dropdown label="Some Label:" options="#{backingBean.list}"/>

真正的问题是是否有一种方法可以在不使用支持 bean 的情况下传递选项?我猜是这样的:

<util:dropdown label="Some Label:" options="Item 1, Item 2, Item 3"/>

或者也许

<util:dropdown label="Some Label:" options="#{backingBean.list}">
<f:selectItem itemLabel="Item 1"/>
<f:selectItem itemLabel="Item 2"/>
<f:selectItem itemLabel="Item 3"/>
</util:dropdown>

注意:显然这两个不起作用,否则我不会问这个问题。

最佳答案

The real question is if there is a way to pass in the options without having to use a backing bean? I guess something like:

<util:dropdown label="Some Label:" options="Item 1, Item 2, Item 3"/>

您可以使用 JSTL fn:split() 将它们分成 String[] . <f:selectItems>也接受为 value .我只会删除 options 中逗号周围的空格。属性。

xmlns:fn="http://java.sun.com/jsp/jstl/functions"
...

<h:selectOneMenu>
<f:selectItems value="#{fn:split(cc.attrs.options, ',')}" />
</h:selectOneMenu>

or maybe

<util:dropdown label="Some Label:">
<f:selectItem itemLabel="Item 1"/>
<f:selectItem itemLabel="Item 2"/>
<f:selectItem itemLabel="Item 3"/>
</util:dropdown>

您可以使用 <composite:insertChildren> 在复合组件中声明必须插入复合组件的子组件的位置。

<h:selectOneMenu>
<composite:insertChildren />
</h:selectOneMenu>

关于java - JSF 复合组件和 selectItems,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6298226/

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