【问题标题】:Passing EL method expression as attribute of custom Facelets tagfile将 EL 方法表达式作为自定义 Facelets 标记文件的属性传递
【发布时间】:2012-10-08 20:19:24
【问题描述】:

我创建了一个自定义 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>

为了传递监听器方法,我使用了一个很老的blog中建议的解决方案:

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

我的问题是:这是最好的方法吗?如何使该方法成为可选方法?

非常感谢您的帮助!再见!

【问题讨论】:

    标签: jsf jsf-2 facelets tagfile methodexpression


    【解决方案1】:

    我的问题是:这是最好的方法吗?

    无论如何,这是唯一的方式,前提是您只能使用标准的 JSF/EL 工具并且不能创建自定义标记处理程序。

    但是,您可以创建自定义标记处理程序来将值表达式转换为方法表达式。 OmniFaces JSF 实用程序库有一个 &lt;o:methodParam&gt; 用于此目的。另见the &lt;o:methodParam&gt; 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>
    

    但不幸的是,这是在特殊方法表达式侦听器属性的特殊情况下不可能的。没有诸如&lt;rich:scrollListener&gt; 之类的东西或允许您将RichFaces 特定的scrollListener 作为单独的标签绑定到&lt;rich:dataScroller&gt; 的东西。在不创建自定义标记处理程序的情况下,最好的方法是将整个 &lt;rich:dataScroller&gt; 复制为两个 &lt;c:if&gt;s(或 &lt;c:choose&gt;);一个有一个没有scrollListener。这太笨拙了。您最好为此创建一个自定义的&lt;my:richScrollListener&gt; taghandler,然后您可以将其放置在&lt;c:if&gt; 中。

    【讨论】:

      猜你喜欢
      • 2014-01-02
      • 2011-11-15
      • 2013-12-13
      • 2012-06-23
      • 1970-01-01
      • 2017-09-14
      • 2012-07-24
      • 1970-01-01
      相关资源
      最近更新 更多