gpt4 book ai didi

jsf - 将 EL 方法表达式作为自定义 Facelets 标记文件的属性传递

转载 作者:行者123 更新时间:2023-12-02 05:26:55 27 4
gpt4 key购买 nike

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

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

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

最佳答案

My questions are: is this the best way to do this?

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

然而,您可以创建一个自定义标记处理程序来将值表达式转换为方法表达式。 OmniFaces JSF 实用程序库有一个 <o:methodParam>正是为了这个目的。另见 the <o:methodParam> demo page .

然后你可能会像这样结束:

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

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

另见:


How can I make the method optional?

理论上,您可以使用 JSTL 标记有条件地构建 View 。像这样的东西:

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

但不幸的是,在特殊方法表达式监听器属性的特殊情况下这是不可能的。没有 <rich:scrollListener> 这样的东西或允许您绑定(bind)特定于 RichFaces 的东西 scrollListener作为 <rich:dataScroller> 的单独标签.在不创建自定义标记处理程序的情况下,最好的做法是复制整个 <rich:dataScroller>。在两个<c:if> s(或 <c:choose> );一有一无scrollListener .这太笨拙了。你最好创建一个自定义 <my:richScrollListener> taghandler 然后你可以把它放在 <c:if> 中.

关于jsf - 将 EL 方法表达式作为自定义 Facelets 标记文件的属性传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12953560/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com