2011-01-30 64 views
3

目前我正在嘗試使用JavaServer Faces 2.0和Facelets視圖技術來實現webpart技術,以實現教育目的。我創建了facelet模板,facelet自定義組件,並製作了一些facelet「模板」客戶端。但有一件事我被卡住了。我無法動態加載控件並將其放入cc:attributesJava facelets動態加載和複合組件屬性

如果我有一個頁面爲例如靜態文本或綁定與ManagedBean屬性ui:include一切運作良好。

<ui:define name="right-column"> 
    right-column asd 
    <h:link outcome="asdf" value="link_get"> 
     <f:param name="aa" value="123" /> 
     <f:param name="a" value="123 dd + 20" /> 
    </h:link> 
    <h:commandLink action="asdf?faces-redirect=true" value="asdf"> 
     <f:param name="aa" value="123" /> 
    </h:commandLink><br /> 
    <ui:include src="./resources/Controls/CategoryTree.xhtml"/><br /> 
    This works even if I put src with MenageBean property. 
    <ui:include src="#{browseProducts.incudePath}"/> 
</ui:define> 

這裏是我的facelet控制(數據綁定此控件中#{TreeBean.root}

<!-- NO INTERFACE --> 
<cc:interface> 
</cc:interface> 

<!-- IMPLEMENTATION --> 
<cc:implementation> 
<!-- This is a very simply scaffolding for Category Three Control. 
    --> 
    <p:tree value="#{TreeBean.root}" var="node" 
      expandAnim="FADE_IN" collapseAnim="FADE_OUT"> 
     <p:treeNode> 
      <h:outputText value="#{node}" /> 
     </p:treeNode> 
    </p:tree> 

</cc:implementation> 

但我有問題,當ui:include點與cc:attribute控制,我不知道如何初始化。從支持豆,做「東西」這個屬性

比如我有這個頁面:

<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets" 
       template="./resources/layout/Template.xhtml" 
       xmlns:sc="http://java.sun.com/jsf/composite/Controls"> 

    <ui:define name="right-column"> 
     <sc:dummy ItemCount="10" /> 
     <ui:include src="./resources/Controls/dummy.xhtml" /> 
    </ui:define> 
</ui:composition> 

這裏去複合控件:

<cc:interface> 
     <cc:attribute name="ItemCount" required="true" 
         shortDescription="This attribute is meaningful " /> 
    </cc:interface> 
    <!-- IMPLEMENTATION --> 
    <cc:implementation> 
    <!-- How to pass ItemCount to my dummy bean to create so many items in 
    list as ItemCount value --> 
     <ui:repeat value="#{dummy.dummyList}" var="dummyItem"> 
      <h:outputText value="#{dummyItem}" /> 
     </ui:repeat> 
    </cc:implementation> 

而且支持bean代碼:

public ArrayList<String> getDummyList() { 
    //Here I try to get dummy list work. 
    dummyList = new ArrayList<String>(getDummyCount()); 
    for (int i=0;i< getDummyCount();i++){ 
     dummyList.add(i + "" + i); 
    } 
    return dummyList; 
} 

如何才能做到這一點?

回答

0

我認爲你有兩個問題:

  1. 調用帶有參數的方法從一個複合組件
  2. 指定一些參數包含的網頁

爲1,因爲JSF 2,您可以直接調用該方法,指定參數(應該是方法簽名的一部分):

 <ui:repeat value="#{dummy.getDummyList(cc.attrs.dummyCode)}" var="dummyItem"> 
      <h:outputText value="#{dummyItem}" /> 
     </ui:repeat> 

但我懷疑你正在嘗試使用它不是專門設計的支持。也許你會有興趣爲你的複合組件編寫支持Java代碼,這是不同的。不過,如果你是初學者,很難掌握。我首先嚐試設計我的頁面和bean交互方式不同。我不知道你想要解決哪個問題,但首先看,這個解決方案看起來太複雜了。

對於2.,你應該看看ui:param。快速谷歌搜索給我這個:http://www.jsfcentral.com/articles/facelets_3.html

+0

感謝您的幫助問題。當我找到時間時,我會檢查這一點:-) – 2011-05-10 10:51:06