1

尝试动态设置eventana4j:ajax时,如下所示:

<a4j:ajax event="#{myBean.event}" listener="#{myBean.listener}" />

我收到以下错误:

<a4j:ajax> The 'event' attribute for behavior tag must be a literal

它似乎来自javax.faces.view.facelets.BehaviorHandler

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");
    }
}

我想写我自己的CustomBehaviorHandler,让它按照我的需要运行。问题是:如何CustomBehaviorHandler用 JSF 注册这个新的?

或者有没有其他方法可以满足我的需求?

我找不到任何关于它的示例或文档,但这似乎是可能的,因为 PrimeFaces 有自己的org.primefaces.component.behavior.ajax.AjaxBehaviorHandler

4

1 回答 1

2

我想编写自己的 CustomBehaviorHandler 以使其按我的需要运行。问题是:如何向 JSF 注册这个新的 CustomBehaviorHandler?

您需要为此创建一个自定义标签。准备一个*.taglib.xml如本答案所示:JSF 中的自定义 Facelet 组件(注意: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>. 注意:你必须在行为处理程序类中重新实现很多;您不能简单地扩展 from BehaviorHandler,因为它已经在构造过程中引发了异常。


或者有没有其他方法可以满足我的需求?

取决于您认为将是解决方案的具体功能要求。不幸的是,问题中的任何地方都没有说明这一点,所以我无法回答那部分。


我找不到任何关于它的示例或文档,但这似乎是可能的,因为 PrimeFaces 有自己的 org.primefaces.component.behavior.ajax.AjaxBehaviorHandler。

就是这样<p:ajax><a4j:ajax>顺便说一句,您最初掌握的也是这样一个。

于 2013-08-29T17:03:58.423 回答