【问题标题】:Dynamically set the event of an a4j:ajax动态设置 a4j:ajax 的事件
【发布时间】:2013-08-29 13:36:19
【问题描述】:

尝试动态设置a4j:ajaxevent 时:

<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 以使其按我的需要运行。问题是:如何向 JSF 注册这个新的CustomBehaviorHandler

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

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

【问题讨论】:

    标签: ajax jsf literals


    【解决方案1】:

    我想编写自己的 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>
    

    然后您就可以使用&lt;my:ajax&gt;。注意:你必须在行为处理程序类中重新实现很多;您不能简单地从 BehaviorHandler 扩展,因为它已经在构建过程中引发了异常。


    或者还有其他方法可以满足我的需要吗?

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


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

    那是&lt;p:ajax&gt;。顺便说一句,您最初掌握的&lt;a4j:ajax&gt; 也是这样的。

    【讨论】:

    • 哇,你说得对,这比我想象的要难...实际上,我发现 .xhtml 文件很快就会过载。我想试试Java-managed View。然后,在 JSF bean 中,只需 instantiate a new View,并使用 custom tags,在您的 .xhtml 文件中写入 only few lines。但这似乎有点乌托邦,我不确定这样一个系统的好处(实际上更多的是技术挑战;)所以如果你有任何线索......无论如何谢谢!
    • 我明白了。如果你走这条路,你也许可以通过ClientBehaviorHolder#addClientBehavior(String, AjaxBehavior) 以编程方式添加它们。
    猜你喜欢
    • 1970-01-01
    • 2011-01-11
    • 2013-07-14
    • 1970-01-01
    • 2019-07-15
    • 1970-01-01
    • 1970-01-01
    • 2012-03-29
    • 1970-01-01
    相关资源
    最近更新 更多