我想覆盖默认 <f:ajax>
的输出渲染。是否有可能覆盖 <f:ajax>
的处理分别标记该标记的渲染器?
最佳答案
您可以覆盖 <f:ajax>
通过创建自定义渲染器 ClientBehaviorRenderer
实现并将其注册为 <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>
请注意,有一个 @FacesBehaviorRenderer
类似于 @FacesRenderer
的注释,但是当任何faces-config.xml
中已经注册了特定的渲染器类型时,它始终优先于注释。由于这已经由 JSF impl 本身提供,因此该注释变得毫无用处。
作为引用,Mojarra 使用 com.sun.faces.renderkit.html_basic.AjaxBehaviorRenderer
MyFaces 使用 org.apache.myfaces.renderkit.html.HtmlAjaxBehaviorRenderer
为此目的。
关于ajax - 覆盖 <f :ajax> rendering with a custom renderer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30525901/