Jsf 将EL方法表达式作为自定义Facelets标记文件的属性传递
我创建了一个自定义JSF标记:Jsf 将EL方法表达式作为自定义Facelets标记文件的属性传递,jsf,jsf-2,facelets,tagfile,methodexpression,Jsf,Jsf 2,Facelets,Tagfile,Methodexpression,我创建了一个自定义JSF标记: <ui:composition> <h:panelGroup> <rich:dataScroller id="#{id}" for="#{table}" execute="#{table}" page="#{scrollerPage}" render="#{table}-sc1" maxPages="5" fastControls="hide" oncomplet
<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>
为了传递listener方法,我使用了一个非常古老的解决方案:
我的问题是:这是最好的方法吗?如何使该方法成为可选的
非常感谢你的帮助!再见
我的问题是:这是最好的方法吗
无论如何,这是唯一的方法,前提是您只能使用标准JSF/EL工具,并且不能创建自定义标记处理程序
但是,您可以创建一个自定义标记处理程序,将值表达式转换为方法表达式。JSF实用程序库中有一个
,正好用于此目的。另见
你可能会这样结束:
<my:dataScroller ... scrollListener="#{bean.aMethod}" />
及
另见:
如何使该方法成为可选的 理论上,可以使用JSTL标记有条件地构建视图。比如:
<h:someComponent>
<c:if test="#{not empty fooAttribute}">
<f:attribute name="foo" value="#{fooAttriubte}" />
</c:if>
</h:someComponent>
但这是在特殊方法表达式侦听器属性的特殊情况下,不幸的是,这是不可能的。没有像
这样的东西,也没有允许您将RichFaces特定的滚动侦听器作为单独的标记绑定到
的东西。在不创建自定义标记处理程序的情况下,最好的方法是在两个
中复制整个
(或一个
);一个带滚动监听器,另一个不带滚动监听器。这太笨拙了。您最好为此创建一个自定义的
标记处理程序,然后将其放入
中
<o:methodParam name="scrollListenerMethod" value="#{scrollListener}" />
<rich:dataScroller ... scrollListener="#{scrollListenerMethod}" />
<h:someComponent>
<c:if test="#{not empty fooAttribute}">
<f:attribute name="foo" value="#{fooAttriubte}" />
</c:if>
</h:someComponent>