2012-04-10 2 views
1

編集者のグループをタブビューに表示したい。各エディタには、レンダリングされたエディタを格納するコンポーネントというプロパティがあります。単純なエディタはHTMLタグを使用してエディタをレンダリングしますが、複雑なエディタは別のページで定義されたエディタを使用します。私はeditor.componentui:includesを使用できないことを知りました。なぜなら、ツリーが構築されているときに値が利用できないからです。どうすればこの問題を解決できますか? uiの代替手段はありますか?includeにはこの制限がありませんか?JSFでダイナミックエディタをUIで表示:include

<ui:composition xmlns="http://www.w3.org/1999/xhtml" 
xmlns:ui="http://java.sun.com/jsf/facelets" 
xmlns:h="http://java.sun.com/jsf/html" 
xmlns:f="http://java.sun.com/jsf/core" 
xmlns:p="http://primefaces.prime.com.tr/ui"> 

<h:panelGroup> 
    <p:tabView value="#{groupsBean.groups}" var="group"> 
     <p:tab title="#{group.name}"> 
      <h:panelGroup> 
       <p:dataTable value="#{group.editors}" var="editor"> 
        <p:column headerText="Key"> 
         <h:outputText value="#{editor.name}" /> 
        </p:column> 
        <p:column headerText="Value"> 
         <h:panelGroup rendered="#{not editor.href}"> 
          <h:outputText value="#{editor.component}" escape="false" /> 
         </h:panelGroup> 
         <h:panelGroup rendered="#{editor.href}"> 
          <ui:include src="#{editor.component}" /> 
         </h:panelGroup> 
        </p:column> 
       </p:dataTable> 
      </h:panelGroup> 
     </p:tab> 
    </p:tabView> 
</h:panelGroup> 

EDIT 1

web.xmlのは、これらのエントリが含まれています

<context-param> 
    <param-name>javax.faces.FACELETS_LIBRARIES</param-name> 
    <param-value>/WEB-INF/springsecurity.taglib.xml; /WEB-INF/custom.taglib.xml</param-value> 
</context-param> 

custom.taglib.xmlは、WEB-INFフォルダ内にあります。

<facelet-taglib> 
    <namespace>http://www.custom.ro/</namespace> 
    <tag> 
     <tag-name>dynamic</tag-name> 
     <component> 
      <component-type>ro.custom.DynamicInclude</component-type>     
     </component> 
    </tag> 
</facelet-taglib> 

DynamicIncludeがgroups.xhtml@FacesComponent("ro.custom.DynamicInclude")

と注釈されている私は、動的名前空間を追加して含む - xmlns:custom="http://www.custom.ro/"を。

EDIT2

最後に、私はそれを動作させるために管理しています。欠落していたのはハンドラクラス(com.corejsf.tag.DynamicIncludeHandler)のエントリでした。また、DynamicIncludeのgetSrcメソッドでsrcをnullとしてテストした行を削除しました。

答えて

1

私が知る限り、ui:includeの代替コンポーネントはありません。 FaceletContext.includeFacelet APIを使用して、このようなことを実装しました。

かなり簡単な代替案は、c:forEachループを使用してテーブルをレンダリングすることです。余分なコンポーネントを自分でコーディングする必要はありません。欠点は、場合によっては重いリソースである可能性がある各行のコンポーネントを取得することです。

+0

FaceletContext.includeFacelet apiを使用して実装例を教えてください。 – Seitaridis

+0

ここにありますhttp://pastebin.com/5e2dgR15 – mrembisz

+0

これまでにカスタムコンポーネントを作成していませんが、これが初めてです。私は2つのクラスを追加し、 "ダイナミック"タグ名とコンポーネントタイプ(DynamicInclude)でタグライブラリ記述子ファイルを作成し、タグライブラリをweb.xmlのjavax.faces.FACELETS_LIBRARIESに追加しました。 .xhtmlファイルでは、を使用しますが、何も表示されません。何か不足していますか? – Seitaridis

関連する問題