JSF不是Richfaces的a4j:ajax监听器的有效方法表达式

时间:2014-05-08 17:43:11

标签: java ajax jsf richfaces

我尝试通过创建自定义EL函数从我的JSF调用静态方法,如here所述。它适用于命令链接,操作等,但当我尝试在Richfaces a4j中调用一个方法时:ajax如下:

<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
   xmlns:rich="http://richfaces.org/rich" xmlns:s="http://jboss.org/schema/seam/taglib" xmlns:a4j="http://richfaces.org/a4j" xmlns:c="http://java.sun.com/jsp/jstl/core"
   xmlns:utils="http://example.com/utils">
   ...
   <h:outputLink value="#">
           <a4j:ajax event="click" listener="#{reflectionUtils.setValue(entity,property,null)}" />
   ...
</ui:composition>

utils.taglib.xml文件:

<facelet-taglib xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0.xsd" version="2.0">
   <namespace>http://example.com/utils</namespace>

   <!-- ReflectionUtils -->
   <function>
      <function-name>setValue</function-name>
      <function-class>com.example.util.ReflectionUtils</function-class>
      <function-signature>void setValue(java.lang.Object, java.lang.String, java.lang.Object)</function-signature>
   </function>
</facelet-taglib>

我收到以下错误:

Caused by javax.faces.view.facelets.TagAttributeException with message: "/resources/facelets/input.xhtml @30,145 listener="#{utils:setValue(entity,property,null)}" Not a Valid Method Expression: #{utils:setValue(entity,property,null)}"

仔细观察我发现this answer说使用jboss-el.jar方法调用paremeters应该有效。尝试过,没有任何改变。

还发现this answer表示应该将web.xml配置为使用Servlet 3.0。也试过,结果相同。

所以我问,a4j:ajax监听器有区别吗?我怎样才能让它发挥作用?

1 个答案:

答案 0 :(得分:1)

您使用的方法看起来像action方法,而不是侦听器方法。您可以将其与a4j:commandLink一起使用。