将valueChangeListener方法表达式传递到标记文件中

时间:2012-06-21 14:52:55

标签: jsf tagfile

我有一个<h:inputText>,其中包含如下事件监听器:

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

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

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

在标记文件中:

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

然而,它将其作为属性而不是作为侦听器方法进行评估。如何将侦听器方法传递给标记文件?

1 个答案:

答案 0 :(得分:2)

您可以通过设计不将方法表达式作为标记文件属性传递。您基本上需要将ValueExpression转换为标记文件中的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时,您也可以使用composite component。这支持将方法表达式传递为<cc:attribute method-signature>。对于JSF 1.x,您也可以创建一个真正的自定义组件,但这比一些XML要多一些。