我有一个<h:inputText>
,其中包含如下事件监听器:
<h:inputText valueChangeListener="#{myBean.handle}"/>
我想把它放在一个标签文件中,如下所示:
<my:itext changeListener="#{myBean.handle}" />
在标记文件中:
<h:inputText valueChangeListener="#{changeListener}" />
然而,它将其作为属性而不是作为侦听器方法进行评估。如何将侦听器方法传递给标记文件?
答案 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要多一些。