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

覆盖<;f:ajax>;使用自定义渲染器进行渲染,ajax,jsf,custom-renderer,Ajax,Jsf,Custom Renderer,我想覆盖默认渲染的输出。是否有可能覆盖标记的处理以及此标记的呈现程序?您可以通过创建自定义实现来覆盖呈现程序,并在呈现程序类型javax.faces.behavior.Ajax上的faces config.xml中将其注册为 public class YourAjaxBehaviorRenderer extends ClientBehaviorRenderer { @Override public String getScript(ClientBehaviorContext b

我想覆盖默认
渲染的输出。是否有可能覆盖
标记的处理以及此标记的呈现程序?

您可以通过创建自定义实现来覆盖
呈现程序,并在呈现程序类型
javax.faces.behavior.Ajax
上的
faces config.xml
中将其注册为

public class YourAjaxBehaviorRenderer extends ClientBehaviorRenderer {

    @Override
    public String getScript(ClientBehaviorContext behaviorContext, ClientBehavior behavior) {
        return "alert('Put your JS code here.')";
    }

}

javax.faces.behavior.Ajax
com.example.YourAjaxBehaviorRenderer
请注意,
@facesrender
中有一个注释异常,但是当任何
faces config.xml
中已经注册了特定的渲染器类型时,它将始终优先于注释。因为这已经由JSF impl本身提供,所以注释就变得无用了


作为参考,Mojarra和MyFaces用于此目的。

从上面的评论中可以看出,short并不总是好的;-)谢谢你的快速回复!我的xhtml源代码中有几个标记。当呈现到前端时,我希望避免内联javascript。我只想把它放在一个街区里。然后添加一个“nonce”标记,并将这个“nonce”标记添加到我的CSP头中以使其XSS保存。我已经为commandButtons做了这个,它很有效。但是commandButton的渲染器很容易覆盖。这就是问题所在:我不知道如何覆盖生成的标记输出:/
<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>