2011-06-09 58 views
2

我一直在玩複合組件,我遇到了一些我找不到的東西。如果不使用複合材料部件我想有這樣的事情:即代碼插入複合材料部件的JSF複合組件和selectItems

<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> 

注:顯然這兩個不工作,或者我就不會問這個問題。

回答

2

真正的問題是,如果有一種方法可以傳遞選項而無需使用支持bean?我想是這樣的:

<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> 

也許

<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> 
+0

說我需要的複合材料部件插入兩套不同的孩子在兩個不同的地方 - 我將如何做到這一點,否則?我只能使用第一個選項。我試圖將f:selectItems放在一個構面中,然後在複合組件中渲染該構面,但這也不起作用。在非複合組件的情況下,即只使用ui:decorate,我可以指定多個ui:爲ui定義:按名稱插入多個子項。爲什麼複合組件不具備此功能? – GreenieMeanie 2015-04-09 22:49:40

+0

@GreenieMeanie:複合材料支持方面。 – BalusC 2015-04-10 05:59:33