2011-01-30 11 views
3

現在、私は、JavaServer Faces 2.0とFaceletsのビューテクノロジーを教育目的で実装しようとしています。私はfaceletテンプレート、faceletカスタムコンポーネントを作成し、いくつかのfacelet "テンプレート"クライアントを作成しました。しかし、一つのことで私は立ち往生しています。私は動的にコントロールをロードすることはできませんとcc:attributesを入れます。Java Facelets動的ローディングとコンポジットコンポーネントの属性

たとえば静的なテキストのページがある場合や、ManagedBeanとバインドしている場合は、プロパティui:includeはすべて正常に動作します。

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

しかし、私はcc:attributeと制御へ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}以内にこのコントロールの内部にあります。 。

<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> 
01:Beanをバックアップおよび「もの」を行うから、この属性例えば

私はこのページを持っています

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

はどのようにこれを行うことができます。ここ

は、複合コントロールを行きますか? 、JSF 2は、インクルードされたページの場合1.

にいくつかのパラメータを指定する複合部品

  • からパラメータを持つメソッドを呼び出す

  • 答えて

    0

    は、私はあなたが二つの問題があると思いますパラメータ(メソッドのシグニチャの一部でなければならない)を指定してメソッドを直接呼び出すことができます。

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

    しかし、私はあなたのために設計されていない何かのためにバッキングを使用しようとしていると思う。たぶん、複合コンポーネントのバックエンドJavaコードを書くことに興味があるかもしれません。しかし、あなたが初心者であれば習得するのは難しいです。私は最初に自分のページとBeanのやりとりを別々にデザインしようと思います。私はどの問題を解決しようとしているのか分かりませんが、最初の見方では、このソリューションは複雑すぎます。

    については、ui:paramをご覧ください。すばやくGoogle検索で私に次のように伝えます:http://www.jsfcentral.com/articles/facelets_3.html

    +0

    問題のお手伝いをありがとう。私は時間を見つけるときこれをチェックします:-) –

    関連する問題