使用自定义渲染器覆盖<f:ajax>渲染

时间:2015-05-29 09:25:33

标签: ajax jsf custom-renderer

我想覆盖默认<f:ajax>渲染的输出。是否有可能覆盖<f:ajax>标记或此标记的渲染器的处理?

1 个答案:

答案 0 :(得分:2)

您可以通过创建自定义ClientBehaviorRenderer实施来覆盖public string DisplayOverload(string a, string b, string c = "c") { return a + b + c; } public string DisplayOverload(string a, string b, string c) { return a + b + c; } 渲染器,并在渲染器类型<f:ajax>的{​​{1}}中将其注册为<client-behavior-renderer>

faces-config.xml
javax.faces.behavior.Ajax

请注意,public class YourAjaxBehaviorRenderer extends ClientBehaviorRenderer { @Override public String getScript(ClientBehaviorContext behaviorContext, ClientBehavior behavior) { return "alert('Put your JS code here.')"; } } 注释与<render-kit> <client-behavior-renderer> <client-behavior-renderer-type>javax.faces.behavior.Ajax</client-behavior-renderer-type> <client-behavior-renderer-class>com.example.YourAjaxBehaviorRenderer</client-behavior-renderer-class> </client-behavior-renderer> </render-kit> 同源,但是当已经在任何@FacesRenderer中注册了特定的渲染器类型时,它始终优先于注释。由于这已经由JSF impl本身提供,因此注释变得无用。

供参考,Mojarra使用@FacesBehaviorRenderer,MyFaces使用com.sun.faces.renderkit.html_basic.AjaxBehaviorRenderer来实现此目的。