2012-10-18 77 views
2

我創建的自定義JSF標記:傳遞EL方法表達爲定製的Facelets屬性TAGFILE

<ui:composition> 
    <h:panelGroup> 
     <rich:dataScroller id="#{id}" for="#{table}" execute="#{table}" 
      page="#{scrollerPage}" render="#{table}-sc1" maxPages="5" 
      fastControls="hide" oncomplete="#{onCompl}" scrollListener="#{scrollListenerBean[scrollListenerMethod]}" /> 
     <h:inputText value="#{scrollerPage}" id="#{table}-sc1" size="2"> 
      <f:convertNumber integerOnly="true" /> 
     </h:inputText> 
     <h:outputText styleClass="outputText" 
      value=" of #{scrollPagesCount} " /> 
     <h:commandButton value="GO! " /> 
    </h:panelGroup> 
</ui:composition> 

要通過監聽方法,我所用的溶液在一個相當老blog建議:

<my:dataScroller id="idDS1" table="table1" 
        scrollerPage="#{bean.navigationHelper.scrollerPage}" 
        scrollPagesCount="#{bean.navigationHelper.scrollPagesCount}" 
        onCompl="initForm();" 
        scrollListenerBean="#{bean}" 
        scrollListenerMethod="aMethod" /> 

我的問題是:這是做到這一點的最好方法是什麼?我如何使該方法可選?

非常感謝您的幫助!再見!

回答

5

我的問題是:這是做到這一點的最好方法嗎?

那是唯一方式反正,只要你只能使用標準的JSF/EL設施,你不能創建一個自定義taghandler。

您可以但是創建一個自定義taghandler的值表達式轉換的方法表達。該OmniFaces JSF工具庫中有一個<o:methodParam>出於這樣的目的。也the <o:methodParam> demo page見。

然後,您可以落得像:

<my:dataScroller ... scrollListener="#{bean.aMethod}" /> 

<o:methodParam name="scrollListenerMethod" value="#{scrollListener}" /> 
<rich:dataScroller ... scrollListener="#{scrollListenerMethod}" /> 

我怎樣才能使該方法可選?

從理論上講,您可以使用JSTL標籤來有條件地構建視圖。喜歡的東西:

<h:someComponent> 
    <c:if test="#{not empty fooAttribute}"> 
     <f:attribute name="foo" value="#{fooAttriubte}" /> 
    </c:if> 
</h:someComponent> 

但是,這是在一個特殊的方法表達聽者的特殊情況下屬性遺憾的是沒有可能的。有作爲<rich:scrollListener>什麼沒有這樣的事情,讓你綁定RichFaces的具體scrollListener作爲一個單獨的標籤的<rich:dataScroller>。如果不創建自定義標記處理程序,您最好做的是在兩個<c:if>(或<c:choose>)中複製整個<rich:dataScroller>;一個和其他沒有scrollListener。這太笨拙了。你最好創建一個自定義的<my:richScrollListener> taghandler,然後你可以放置在<c:if>

相關問題