2010-05-03 16 views
2

我們考慮一下,我想擴展現有的JSF組件,如<rich:datatable/>。我的主要要求是動態修改<f:facet>的內容,以更改其內容。如何動態更改自定義組件中構面的內容?

實現該目標的最佳方法是什麼?或其中是代碼中實現該目的的最佳位置?

在我faces-config.xml,我有以下聲明:

<faces-config> 
    ... 
    <component> 
     <component-type>my.component.dataTable</component-type> 
     <component-class>my.project.component.table.MyHtmlDataTable</component-class> 
    </component> 
    ... 
    <render-kit> 
     <render-kit-id>HTML_BASIC</render-kit-id> 
     <renderer> 
      <component-family>org.richfaces.DataTable</component-family> 
      <renderer-type>my.renderkit.dataTable</renderer-type> 
      <renderer-class>my.project.component.table.MyDataTableRenderer</renderer-class> 
     </renderer> 
     ... 

而且,我my-project.taglib.xml文件(我使用Facelets)看起來像:

<facelet-taglib> 
    <namespace>http://my.project/jsf</namespace> 
    <tag> 
     <tag-name>dataTable</tag-name> 
     <component> 
      <component-type>my.component.dataTable</component-type> 
      <renderer-type>my.renderkit.dataTable</renderer-type> 
     </component> 
    </tag> 

因此,大家可以看到,我有我的項目中的兩個類用於我的自定義數據表:MyHtmlDataTableMyDataTableRenderer。 我的想法之一是直接在我的渲染器的doEncodeBegin()方法中修改<f:facet>的內容。這是行得通的(實際上是almost working),但我並不認爲這是實現我的修改的更好的地方。

您認爲如何?

技術信息:JSF 1.2,Facelets的,RichFaces的3.3.2,Java 1.6的

回答

0

我想你可以打電話getFacet(facetName),使返回組件上的修改。

您可以覆蓋getFacets()(和/或getFacet(..)),調用super方法,並就返回值的修改,然後返回。

+0

是的,這正是我所做的,但我的問題是要知道我必須在那裏做什麼?因爲目前,我在RENDER_VIEW階段對渲染器類進行了修改,但我對此解決方案並不完全滿意...... – romaintaz 2010-05-03 13:50:24

+0

請參閱我的更新。 – Bozho 2010-05-03 13:52:48