2

我有<h:inputText>一个事件监听器,如下所示:

<h:inputText valueChangeListener="#{myBean.handle}"/>

我想把它放在一个标签文件中,如下所示:

<my:itext changeListener="#{myBean.handle}" />

在标签文件里面:

<h:inputText valueChangeListener="#{changeListener}" />

但是,它将其评估为属性而不是侦听器方法。如何将侦听器方法传递到标记文件中?

4

1 回答 1

2

您可以通过设计不将方法表达式作为标记文件属性传递。您基本上需要将 转换为标签文件内的ValueExpressiona 。MethodExpression

对于 JSF 2.x Facelets,这可以使用OmniFaces<o:methodParam>来解决。

<o:methodParam name="changeListenerMethod" value="#{changeListener}" />
<h:inputText valueChangeListener="#{changeListenerMethod}" />

但是,对于旧的和已弃用的 Facelets 1.x 或 JSP 2.x,没有现成的解决方案。然而,OmniFaces<o:methodParam>是开源的,如有必要,您应该能够为 Facelets 1.x 或 JSP 复制和更改它。

请注意,当您实际上已经在使用 JSF 2.x 时,您也可以使用复合组件来代替。这支持将方法表达式作为<cc:attribute method-signature>. 对于 JSF 1.x,您也可以创建一个真正的自定义组件,但这比一些 XML 需要更多的工作。

于 2012-06-21T15:30:07.010 回答