尝试动态设置event
的{{1}}时如下:
a4j:ajax
我收到以下错误:
<a4j:ajax event="#{myBean.event}" listener="#{myBean.listener}" />
似乎来自javax.faces.view.facelets.BehaviorHandler
:
<a4j:ajax> The 'event' attribute for behavior tag must be a literal
我想编写自己的public BehaviorHandler(BehaviorConfig config) {
super(config);
this.behaviorId = config.getBehaviorId();
this.event = this.getAttribute("event");
if (null != event && !event.isLiteral()) {
throw new TagException(this.tag, "The 'event' attribute for behavior tag must be a literal");
}
}
以使其按照我的需要行事。问题是:如何使用JSF注册这个新的CustomBehaviorHandler
?
或者还有其他方法可以满足我的需求吗?
我找不到任何关于它的示例或文档,但似乎有可能,因为PrimeFaces有自己的org.primefaces.component.behavior.ajax.AjaxBehaviorHandler。
答案 0 :(得分:2)
我想编写自己的CustomBehaviorHandler,使其按照我的需要运行。问题是:如何使用JSF注册这个新的CustomBehaviorHandler?
您需要为此创建自定义标记。准备*.taglib.xml
,如以下答案所示:Custom Facelet component in JSF(注意:不需要taghandler类)并添加以下条目:
<tag>
<tag-name>ajax</tag-name>
<behavior>
<behavior-id>com.example.MyAjaxBehavior</behavior-id>
<handler-class>com.example.MyAjaxBehaviorHandler</handler-class>
</behavior>
<!-- Define attributes here. -->
</tag>
然后您就可以使用<my:ajax>
了。注意:你必须在行为处理程序类中重新实现很多;你不能简单地从BehaviorHandler
扩展,因为它在构造期间抛出异常。
或者还有其他方法可以满足我的需求吗?
取决于您认为此将成为解决方案的具体功能要求。遗憾的是,问题的任何地方都没有说明,所以我无法回答这一部分。
我找不到任何关于它的示例或文档,但似乎有可能,因为PrimeFaces有自己的org.primefaces.component.behavior.ajax.AjaxBehaviorHandler。
那是<p:ajax>
。顺便提一下,你最初掌握的<a4j:ajax>
也是这样的。