使用自定义渲染器覆盖 <f:ajax> 渲染
Override <f:ajax> rendering with a custom renderer
我想覆盖默认 <f:ajax>
渲染的输出。是否有可能覆盖 <f:ajax>
标签的处理以及此标签的呈现器?
您可以通过创建自定义 ClientBehaviorRenderer
实现来覆盖 <f:ajax>
渲染器,并将其注册为 faces-config.xml
中渲染器类型 javax.faces.behavior.Ajax
的 <client-behavior-renderer>
。
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
的 @FacesBehaviorRenderer
注释,但是当已经在任何 faces-config.xml
中注册了特定的渲染器类型时,它总是优先于注释。由于这已经由 JSF impl 本身提供,因此注释变得无用。
作为参考,Mojarra 为此目的使用 com.sun.faces.renderkit.html_basic.AjaxBehaviorRenderer
and MyFaces uses org.apache.myfaces.renderkit.html.HtmlAjaxBehaviorRenderer
。
我想覆盖默认 <f:ajax>
渲染的输出。是否有可能覆盖 <f:ajax>
标签的处理以及此标签的呈现器?
您可以通过创建自定义 ClientBehaviorRenderer
实现来覆盖 <f:ajax>
渲染器,并将其注册为 faces-config.xml
中渲染器类型 javax.faces.behavior.Ajax
的 <client-behavior-renderer>
。
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
的 @FacesBehaviorRenderer
注释,但是当已经在任何 faces-config.xml
中注册了特定的渲染器类型时,它总是优先于注释。由于这已经由 JSF impl 本身提供,因此注释变得无用。
作为参考,Mojarra 为此目的使用 com.sun.faces.renderkit.html_basic.AjaxBehaviorRenderer
and MyFaces uses org.apache.myfaces.renderkit.html.HtmlAjaxBehaviorRenderer
。