动态设置a4j:ajax的事件

时间:2013-08-29 13:36:20

标签: ajax jsf literals

尝试动态设置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

1 个答案:

答案 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>也是这样的。