我尝试通过创建自定义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监听器有区别吗?我怎样才能让它发挥作用?
答案 0 :(得分:1)
您使用的方法看起来像action方法,而不是侦听器方法。您可以将其与a4j:commandLink
一起使用。