我想覆盖默认<f:ajax>
渲染的输出。是否有可能覆盖<f:ajax>
标记或此标记的渲染器的处理?
答案 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
来实现此目的。