2

カスタム JSF タグを作成しました。

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

リスナー メソッドを渡すために、かなり古いブログで提案されているソリューションを使用しました。

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

私の質問は次のとおりです。これはこれを行うための最良の方法ですか? メソッドをオプションにするにはどうすればよいですか?

助けてくれてどうもありがとう!さよなら!

4

1 に答える 1

5

私の質問は次のとおりです。これはこれを行うための最良の方法ですか?

とにかく、これが唯一の方法です。ただし、標準のJSF / EL機能しか使用できず、カスタムタグハンドラーを作成できない場合に限ります。

ただし、カスタムタグハンドラーを作成して、値式をメソッド式に変換することもできます。OmniFaces JSFユーティリティライブラリには、<o:methodParam>まさにこの目的のためのものがあります。デモページも参照して<o:methodParam>ください。

その後、次のようになります。

<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をバインドできるようなものはありません。カスタムタグハンドラーを作成せずにできる最善のことは、全体を2つのs(または)に複製することです。1つはあり、もう1つはありません。これは不器用です。このためのカスタムタグハンドラーを作成して、に配置することをお勧めします。scrollListener<rich:dataScroller><rich:dataScroller><c:if><c:choose>scrollListener<my:richScrollListener><c:if>

于 2012-10-18T11:57:38.420 に答える