当试图动态设置a4j:ajax
的event
如下:动态设置的A4J的事件: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
以使其表现符合我的需要。问题是:如何使用JSF注册这个新的CustomBehaviorHandler
?
或者还有其他方法可以满足我的需求吗?
我找不到任何示例或文档,但它似乎是可能的,因为PrimeFaces有它自己的org.primefaces.component.behavior.ajax.AjaxBehaviorHandler。
哇,你是对的,比我想象的要难...其实,我发现.xhtml文件变得很快被超载。我想尝试[Java管理的视图](http://pastebin.com/VqWHFSxi)。然后,在JSF bean中,只需[实例化一个新的视图](http://pastebin.com/GgnmRMwp),并使用[自定义标签](http://pastebin.com/L8b2bBRc),写[只有几行] (http://pastebin.com/7PKHku1M).xhtml文件中。但它似乎有点乌托邦,我不确定这样一个系统的好处(它实际上更多的是关于技术挑战;)所以,如果你有任何线索......无论如何,谢谢! – sp00m
我明白了。如果你走这条路,你可以通过'ClientBehaviorHolder#addClientBehavior(String,AjaxBehavior)'以编程方式添加它们。 – BalusC